3

我正在尝试仅绘制 a 的自定义部分UIImage(即:我想显示UIImage用户触摸的部分) ,并且通过使用mask.layer

我的类似这样的东西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 中仅绘制图像的自定义部分(可以是任何形状)的最佳方法是什么?.

4

1 回答 1

4

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

- (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];
}
于 2012-04-19T00:45:58.957 回答