2010-03-14 5 views
-1

je dessine une image arrondie dans une cellule UITableView comme ceci:Ajouter une ombre à UIImage dessiné dans le chemin arrondi

CGRect imageRect = CGRectMake(8, 8, 40, 40); 
CGFloat radius = 3; 

CGFloat minx = CGRectGetMinX(imageRect); 
CGFloat midx = CGRectGetMidX(imageRect); 
CGFloat maxx = CGRectGetMaxX(imageRect); 
CGFloat miny = CGRectGetMinY(imageRect); 
CGFloat midy = CGRectGetMidY(imageRect); 
CGFloat maxy = CGRectGetMaxY(imageRect); 

CGContextMoveToPoint(context, minx, midy); 
CGContextAddArcToPoint(context, minx, miny, midx, miny, radius); 
CGContextAddArcToPoint(context, maxx, miny, maxx, midy, radius); 
CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius); 
CGContextAddArcToPoint(context, minx, maxy, minx, midy, radius); 
CGContextClosePath(context); 

CGContextClip(context); 

[self.theImage drawInRect:imageRect]; 

Cela ressemble beaucoup, mais je voudrais ajouter une ombre à pour effet supplémentaire . J'ai essayé d'utiliser quelque chose le long des lignes de:

CGContextSetShadowWithColor(context, CGSizeMake(2, 2), 2, [[UIColor grayColor] CGColor]); 
CGContextFillPath(context); 

Mais cela ne fonctionne que lorsque l'image a des zones transparentes, si l'image est pas du tout transparent, il ne sera même pas dessiner une ombre autour de la frontière. Je me demande s'il y a quelque chose que je fais mal?

Répondre

3

Il s'avère que la méthode correcte consiste à écrêter le UIImage lui-même plutôt que le chemin. Il est alors facile de:

CGContextSetShadow(...); 
[self.theClippedImage drawInRect:...]; 
1

J'imagine que si l'image que vous dessinez n'a pas de zones transparentes, CoreGraphics interprète l'image entière comme un objet solide. Ensuite, s'il essaye de dessiner une ombre, l'ombre sera dessinée en dehors des limites de l'image et en tant que telle, vous ne la verrez pas.

This page fournit un bon exemple de la façon de faire un tel dessin avec CoreGraphics. Peut-être pourriez-vous essayer de modifier le code fourni ici et voir si cela résout votre problème.

+0

La seule chose que je pourrais prendre à partir de cette page a été que je peux utiliser CGContextSetShadow (contexte, CGSizeMake (1, -1), 3); au lieu de ce que j'utilisais auparavant. Je ne sais toujours pas comment je peux dessiner l'ombre en dehors des rects de l'image si l'image n'a aucune transparence. –

Questions connexes