iOS:仅绘制UImage的一部分

时间:2012-04-18 17:41:40

标签: iphone objective-c ios image-manipulation quartz-core

我正在尝试仅绘制UIImage的自定义部分(即:我想显示 UIImage用户触摸的部分)我正在拥有使用mask的{​​{1}}属性获得合理的结果。

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]; } 定义的图像部分。

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

1 个答案:

答案 0 :(得分:4)

您可以尝试的一件事就是剪切而不是创建额外的图层。 e.g。

- (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];
}