2012-05-16 2 views
3

J'essaie d'ajouter des ombres à l'une de mes vues et ce que je voudrais faire, c'est dessiner des ombres seulement sur un côté et les laisser avoir des arêtes vives. Non, j'ai essayé pas mal de méthodes sans trop de chance (en utilisant les propriétés shadow de CALayer + UIBezierPaths de la vue). Cependant, iOS est rendu toujours une ombre avec des bords doux comme celui-ci:iOS: ombre portée avec des bords tranchants

enter image description here

Mais ce que je veux vraiment acchieve est quelque chose comme ça (sans coins arrondis et des arêtes vives sur les côtés sauf un):

enter image description here

est-il un moyen élégant de le faire ou ce que je dois dessiner l'ombre me utilisant CoreGraphics?

PS: J'ai oublié de mentionner, mon avis devrait effectivement être une coutume UIButton, drawRect donc primordial: serait une douleur ici

+0

Hey YllierDev, pourriez-vous s'il vous plaît expliquer à quoi ressemblait votre bloc de code final pour obtenir l'effet ci-dessus? J'essaie d'apprendre comment je peux appliquer une ombre portée sur mon bouton en montrant seulement l'ombre portée sur la droite. Si vous pouviez m'aider, ce serait génial! merci d'avance – Pavan

Répondre

4

J'ai vécu un masque enlever l'ombre de la vue ... alors peut-être vous peut essayer ça.

CALayer *mask = [[[CALayer alloc] init] autorelease]; 
    mask.backgroundColor = [UIColor blackColor].CGColor; 
    mask.frame = CGRectMake(0.0, 0.0, yellowView.bounds.size.width + shadowWidth, yellowView.bounds.size.height); 
    yellowView.layer.mask = mask; 
+0

cela ressemble à une bonne suggestion. Pourquoi n'ai-je pas pensé à ça ... (facepalm) – YllierDev

+0

Merci Matt, l'utilisation d'un masque était la bonne option. Je ne sais vraiment pas pourquoi je ne pensais pas que: D – YllierDev

2

Je pense que ce que vous voulez être en train de changer est la valeur shadowRadius - que mettre à zéro et vous devriez obtenir le tranchant vous cherchez:

myView.layer.shadowRadius = 0; 
+0

merci pour la suggestion, mais en réglant le shadowRadius à 0, tous les bords seraient nets, mais je veux des bords vifs sauf d'un côté. – YllierDev

+0

Désolé, raté cette partie de la question. Avez-vous essayé d'utiliser quelque chose comme ça yellowView.layer.shadowPath = CGRectMake (yellowView.bounds.size.width, 0, 1, yellowView.bounds.size.height) ;? Cela pourrait vous permettre de faire une partie du chemin, mais avec un flou, le flou peut monter et descendre au-delà des limites de la vue. –

+0

Si vous ne pouvez pas surcharger drawRect, alors vous devrez probablement utiliser une sous-vue pour y parvenir, donc la vue parent est ClipsToBounds = YES, et vous avez une sous-vue pour le patch jaune, où sa largeur est disons 10 pixels de moins que le bord droit, et vous mettez votre ombre sur le patch jaune. Si vous pensez que cela pourrait fonctionner pour vous, je vais l'écrire dans une réponse plus complète. –

Questions connexes