我正在尝试仅绘制UIImage的自定义部分(即:我想显示UIImage用户触摸的部分),并且通过使用masklayer属性可以得到合理的结果。

在我的UIView上是这样的:

UIBezierPath *maskPath = [UIBezierPath bezierPath];
[maskPath setLineWidth:10.0];
[maskPath moveToPoint:CGPointMake(10.0, 10.0)];
[maskPath addLineToPoint:CGPointMake(100.0, 100.0)];
CAShapeLayer *shapeMaskLayer = [CAShapeLayer layer];
shapeMaskLayer.path = maskPath.CGPath;
[self.layer setMask:shapeMaskLayer];

然后,在drawRect上:
- (void)drawRect:(CGRect)rect
{
    [img drawInRect:rect];
}

有用。我只是看到maskPath定义的图像部分。

但是,看起来这不是解决此问题的最佳方法。所以我的问题是:在iOS SDK中仅绘制图像的自定义部分(可以是任何形状)的最佳方法是什么?

最佳答案

您可以尝试做的一件事就是简单地裁剪而不是创建额外的图层。例如

- (void)drawRect:(CGRect)rect
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();

    UIBezierPath *maskPath = [UIBezierPath bezierPath];
    [maskPath setLineWidth:10.0];
    [maskPath moveToPoint:CGPointMake(10.0, 10.0)];
    [maskPath addLineToPoint:CGPointMake(100.0, 100.0)];

    CGContextAddPath(ctx, maskPath.CGPath);
    CGContextClip(ctx)
    [img drawInRect:rect];
}

08-19 11:52