在我的应用程序中,我有两个视图一个在另一个之上。我在下面的视图我有一个捕获的图像,在上面的视图中我已经放置了一个图像。如果用户需要在上面的图像中进行一些更改,我可以选择删除图像。
一切正常,问题是,如果我试图擦除图像,它似乎是一个破碎的。图像不会以温和的方式删除。当我擦除它看起来像下面的那个。
我希望它如下
怎么做,请帮帮我
以下是我的代码:
UIGraphicsBeginImageContext(frontImage.frame.size);
[frontImage.image drawInRect:CGRectMake(0, 0, frontImage.frame.size.width, frontImage.frame.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 10);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1, 0, 0, 10);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
CGContextClearRect (UIGraphicsGetCurrentContext(), CGRectMake(lastPoint.x, lastPoint.y, 50, 50));
CGContextStrokePath(UIGraphicsGetCurrentContext());
frontImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
答案 0 :(得分:1)
问题是你正在使用方形画笔,并且你只是在用户绘制的线条上的一个点上擦除那个方块。此外,您的笔触颜色完全错误。
看起来您正试图将笔划设置为清晰的颜色,并在前一点和当前点之间画一条线。如果你想这样做,你应该这样做:
CGContextRef currCtx = UIGraphicsGetCurrentContext();
CGContextSetRGBStrokeColor (currCtx, 0, 0, 0, 0);
CGContextMoveToPoint (currCtx, startPt.x, startPt.y);
CGContextLineToPoint (currCtx, endPt.x, endPt.y);
在这种情况下,startPt.x / y是上一次触摸的位置,endPt.x / y是当前触摸。
请注意,要获得与您发布的图片一样漂亮的线条,您需要实际使用抗锯齿纹理并在线条的每个点绘制它,从而改变其大小。但是上面的内容应该会让你看起来很不错。
答案 1 :(得分:0)
UIGraphicsBeginImageContext(imageView1.frame.size);
[imageView1.image drawInRect:CGRectMake(0, 0,imageView1.frame.size.width, imageView1.frame.size.height)];
CGContextSetBlendMode(UIGraphicsGetCurrentContext( ),kCGBlendModeClear);
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext( ), 25.0);
CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), [[UIColor clearColor] CGColor]);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), point.x, point.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), point.x, point.y);
CGContextStrokePath(UIGraphicsGetCurrentContext()) ;
imageView1.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();