一旦我在UIImage上绘制了一些线条(如画笔应用程序),那么我想清除它们,就像橡皮一样。我在这个网站和Google上搜索了很多,我尝试了一些代码,但我找不到正确的解决方案。 这是我用来写的代码:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
if(isDrawing == YES) {
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:mainImageView.superview];
UIGraphicsBeginImageContext(mainImageView.frame.size);
[mainImageView.image drawInRect:CGRectMake(0, 0, mainImageView.frame.size.width, mainImageView.frame.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), dimension);
const CGFloat *components = CGColorGetComponents([color CGColor]);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), components[0], components[1], components[2], components[3]);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());
mainImageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
lastPoint = currentPoint;
} else {
//Clear current line (like a rubber would do)
}
}
答案 0 :(得分:2)
在这种情况下,[UIColor clearColor]
无效,请使用CGContextClearRect(context,rect);
清除该区域!
答案 1 :(得分:0)
使用[UIColor clearColor]
填充上下文的所需部分。
答案 2 :(得分:0)
正确的方法是使用Bezier路径:
清除它(使用“removeAllPoints”)并调用setNeedsDisplay会使背景重新出现。
如果您想使用其他工具橡皮清除您所写的路径(例如,您使用铅笔工具以蓝色编写..而橡胶工具清除蓝线并使背景重新出现),您可以使用“ containsPoint:“删除一些形成bezier路径的点。
我们这样做了。
使用bezier路径并非易事,但非常令人兴奋.. :)