【问题标题】:Add shadow to UIImage drawn in rounded path为圆形路径中绘制的 UIImage 添加阴影
【发布时间】:2011-01-27 11:50:22
【问题描述】:

我正在 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);

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

我想知道是不是我做错了什么?

【问题讨论】:

    标签: iphone uitableview uiimage draw shadow


    【解决方案1】:

    原来正确的方法是剪裁 UIImage 本身而不是路径。然后是一个简单的问题:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我唯一能从那个页面得到的是我可以使用 CGContextSetShadow (context, CGSizeMake(1, -1), 3);而不是我以前使用的。如果图像根本没有任何透明度,我仍然不清楚如何在图像的矩形之外绘制阴影。
      猜你喜欢
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-03
      相关资源
      最近更新 更多