代码之家  ›  专栏  ›  技术社区  ›  Tom Irving

将阴影添加到以圆形路径绘制的uiimage

  •  -1
  • Tom Irving  · 技术社区  · 15 年前

    我在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 回复  |  直到 15 年前
        1
  •  3
  •   Tom Irving    15 年前

    正确的方法是剪切uiimage本身而不是路径。那就很简单了:

    CGContextSetShadow(...);
    [self.theClippedImage drawInRect:...];
    
        2
  •  1
  •   pheelicks    15 年前

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

    This page 提供了如何使用CoreGraphics绘制此类图形的良好示例。也许您可以尝试修改这里提供的代码,看看这是否解决了您的问题。