用手画线时裁剪图像

时间:2014-07-18 17:53:30

标签: ios

我在视图上添加了一个图像视图。视图正在使用UIBezierPath并触摸响应方法以在屏幕上拖动时绘制线条。现在我想要剪切线下方的图像部分。我怎样才能做到这一点。

我使用以下方法绘制线

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint p = [touch locationInView:self];

    [path moveToPoint:p];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint p = [touch locationInView:self];
    [path addLineToPoint:p]; // (4)
    [self setNeedsDisplay];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self touchesMoved:touches withEvent:event];
}

enter image description here

1 个答案:

答案 0 :(得分:0)

试试这个:

@property (strong, nonatomic) UIBezierPath *bezierPath;
//...

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint p = [touch locationInView:self];      
    //...

    self.bezierPath = [UIBezierPath bezierPath];
    [self.bezierPath moveToPoint:p];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint p = [touch locationInView:self];
    //...

    [self.bezierPath addLineToPoint:p];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self touchesMoved:touches withEvent:event];

    // Here you can call -croppedImage; method and get the image you need.
}

- (UIImage *)croppedImage
{
    [self.bezierPath closePath];

    UIImage *image = //Your initial image;

    CGSize imageSize = image.size;
    CGRect imageRect = CGRectMake(0, 0, imageSize.width, imageSize.height);    

    UIGraphicsBeginImageContextWithOptions(imageSize, NO, [[UIScreen mainScreen] scale]);
    // Create the clipping path and add it
    [self.bezierPath addClip];
    [image drawInRect:imageRect];
    UIImage *croppedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return croppedImage;
}

这是一个快速编写的代码,因此可能出现错误。很抱歉:)