2010-03-14 34 views
-1

我画一个圆形图像中一个UITableView细胞像这样:添加阴影的UIImage绘制圆的路径

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]; 

这看起来不错,但我想阴影添加到它添加效果。 我使用的线沿线的一些尝试:

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

但是,当图像有透明区域这只作品,如果图像是完全不透明,它甚至不会画周围的阴影边境。

我想知道是否有什么我做错了吗?

回答

3

原来,正确的方法是剪裁UIImage本身而不是路径。这是一个简单的事情:

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

我想象如果你正在绘制的图像没有透明区域,那么CoreGraphics将整个图像解释为一个固体对象。然后,如果它试图画出一个阴影,阴影将被吸引到图像的边界之外,因此你将不会看到它。

This page提供了一个很好的例子,说明如何使用CoreGraphics进行这种绘图。也许你可以尝试修改那里提供的代码,看看是否能解决你的问题。

+0

我唯一可以从该网页拿起的是我可以使用CGContextSetShadow(context,CGSizeMake(1,-1),3);而不是我之前使用的。如果图像没有任何透明度,我仍然不清楚如何在图像的正反面之外绘制阴影。 – 2010-03-20 14:22:52