2013-03-18 1 views
1

Il semble y avoir beaucoup de réflexions à ce sujet, ainsi que des questions SO. Cependant, certains d'entre eux disent que certains travaux de code. Par exemple:Utilisation de Quartz pour arrondir les coins et appliquer une ombre

[self.layer setShadowOffset:CGSizeMake(1, 3)]; 
[self.layer setShadowOpacity:0.9]; 
[self.layer setShadowRadius:3.0f]; 
[self.layer setShouldRasterize:YES]; 

[self.layer setCornerRadius:12.0f]; 

[self.layer setShadowPath:[[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:12.0f] CGPath]]; 

Doit s'appliquer à la fois un rayon de coin de 12,0 f et une ombre. Mais ça ne marche pas. Quand j'utilise ce code, j'ai l'ombre, mais pas de rayon de coin. Pour autant que je sache, c'est parce que j'ai besoin de régler ClipsToBounds sur YES. Mais, à son tour nie l'ombre.

Est-ce que je fais quelque chose de mal ou si le code ci-dessus ne fonctionne pas?

Aussi, les gens disent qu'un bon moyen de surmonter ce problème est de créer un calque d'ombre séparé, puis de l'ajouter.

Mais comment le ferais-je dans un drawRect d'UIView? - Exemple de code serait génial!

Merci!

Répondre

0

Votre code semble bon J'ai essayé votre code et ça marche très bien avec moi.

assurez-vous que rect utilisé dans [[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:12.0f] CGPath]] est correct et si vous utilisez un fond noir, vous ne pouvez pas voir d'ombre.

J'ai essayé ceci dans mon code. Voici le code de travail .......

[self.EnterQtyView.layer setShadowOffset:CGSizeMake(1, 5)]; 
[self.EnterQtyView.layer setShadowOpacity:1.0]; 
[self.EnterQtyView.layer setShadowRadius:5.0f]; 
[self.EnterQtyView.layer setShouldRasterize:YES]; 
[self.EnterQtyView.layer setCornerRadius:12.0f]; 
[self.EnterQtyView.layer setShadowPath:[[UIBezierPath bezierPathWithRoundedRect:self.EnterQtyView.frame cornerRadius:12.0f] CGPath]]; 

Espérons que cela vous aidera .................

+1

Merci fro votre réponse. J'ai travaillé autour de lui à l'origine en ajoutant une vue sous l'original, puis j'ai décidé de changer ma conception et d'utiliser une image redimensionnable qui a été conçue comme une pile de papiers à la place. Comme vous avez dit que votre code fonctionne par rapport à ma question initiale, je vais le définir comme la réponse acceptée si :) –

Questions connexes