UIBezierPath橡皮擦

我在iPad应用程序中使用UIBezierPath进行免费手绘。 我想为这个UIBezierPath应用橡皮擦。 但是我只想通过这条path擦除绘图。 我不能使用path颜色作为背景颜色,因为我在背景上有其他元素。 有谁能够帮助我。 以下是我的免费手绘图的代码。

- (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { self.backgroundColor = [UIColor clearColor]; self.opaque = NO; lineWidths = 10; brushPattern = [UIColor greenColor]; pathArray = [[NSMutableArray alloc]init]; bufferArray = [[NSMutableArray alloc]init]; self.multipleTouchEnabled = NO; } return self; } - (void)drawRect:(CGRect)rect { for (NSMutableDictionary *dictionary in pathArray) { UIBezierPath *_path = [dictionary objectForKey:@"Path"]; UIColor *_colors = [dictionary objectForKey:@"Colors"]; [_colors setStroke]; _path.lineCapStyle = kCGLineCapRound; [_path stroke]; } } -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { myPath=[[UIBezierPath alloc]init]; myPath.lineWidth=lineWidths; CGPoint touchPoint = [[touches anyObject] locationInView:self]; UITouch *mytouch=[[touches allObjects] objectAtIndex:0]; [myPath moveToPoint:[mytouch locationInView:self]]; [myPath addLineToPoint:CGPointMake(touchPoint.x, touchPoint.y)]; dict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:myPath, @"Path", brushPattern, @"Colors", nil]; [pathArray addObject:dict]; [self setNeedsDisplay]; [undoManager registerUndoWithTarget:self selector:@selector(undoButtonClicked) object:nil]; } -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *mytouch=[[touches allObjects] objectAtIndex:0]; [myPath addLineToPoint:[mytouch locationInView:self]]; [self setNeedsDisplay]; } 

存储BOOL值以进行擦除: BOOL _erase;

 BOOL eraseButtonIsTapped = ... if eraseButtonIsTapped { _erase = yes; } else{ _erase = NO; } 

绘图时:

 [myPath strokeWithBlendMode:_erase?kCGBlendModeClear:kCGBlendModeNormal alpha:1.0f]; 

试试这个

  brushPattern = view.backgroundColor; 

这将在你的绘制path背后描绘一个新的颜色。 你可以使用相同的path来做到这一点。 所以以后你也可以实现重做/撤消操作。 如果你想我可以解释你更多的这一点。