向以圆角路径绘制的UIImage添加阴影

时间:2010-03-14 22:25:49

标签: iphone uitableview uiimage draw shadow

我在UITableView单元格中绘制圆形图像,如下所示:

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

但这仅适用于图像具有透明区域的情况,如果图像完全不透明,则甚至不会在边框周围绘制阴影。

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

2 个答案:

答案 0 :(得分:3)

原来这样做的正确方法是剪切UIImage本身而不是路径。这是一个简单的问题:

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

答案 1 :(得分:1)

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

This page提供了如何使用CoreGraphics进行此类绘制的一个很好的示例。也许您可以尝试修改那里提供的代码,看看是否能解决您的问题。