实现绘图应用程序的橡皮擦function

我正在ray wenderlich的网站上关于用UIKit创build一个简单的绘图应用程序的这个伟大的教程。 http://www.raywenderlich.com/18840/how-to-make-a-simple-drawing-app-with-uikit

该教程是伟大的,一切工作。 我遇到的问题是,在创build橡皮擦function时,ray提出的解决scheme是使用与背景具有相同颜色的画笔。 对我来说,这似乎不是一个很好的解决scheme。 如果背景不是一个像梯度或任何图像像许多着色书应用程序一样的纯色。

所以基本上问题是:是否有一种方法可以在给定的位置从UIImageView中移除颜色(将该区域中的所有像素转换为透明)。

任何帮助或指针将大大appriciated。 谢谢

我在我的应用程序中有相同的问题,经过漫长的search,我发现这个问题的简单解决scheme。

我只是使用UIViewController触摸方法

以下是我的做法,

码:-

  #pragma mark touches stuff... - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; lastTouch = [touch locationInView:self.editedImageView]; } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; currentTouch = [touch locationInView:self.editedImageView]; CGFloat brushSize; if (isEraser) { brushSize=eraser; } else { brushSize=mark; } CGColorRef strokeColor = [UIColor whiteColor].CGColor; UIGraphicsBeginImageContext(self.editedImageView.frame.size); CGContextRef context = UIGraphicsGetCurrentContext(); [self.editedImageView.image drawInRect:CGRectMake(0, 0, self.editedImageView.frame.size.width, self.editedImageView.frame.size.height)]; CGContextSetLineCap(context, kCGLineCapRound); CGContextSetLineWidth(context, brushSize); if (isEraser) { CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), [UIColor colorWithPatternImage:self.im].CGColor); } else { CGContextSetStrokeColorWithColor(context, strokeColor); CGContextSetBlendMode(context, kCGBlendModeClear); } CGContextBeginPath(context); CGContextMoveToPoint(context, lastTouch.x, lastTouch.y); CGContextAddLineToPoint(context, currentTouch.x, currentTouch.y); CGContextStrokePath(context); self.editedImageView.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); lastTouch = [touch locationInView:self.editedImageView]; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { } 

投入:

 self.editedImageView.image = "Your Custom image"; self.im = "Your Custom image"; 

你的问题的简单解决scheme将是:

 CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), [UIColor colorWithPatternImage:self.im].CGColor); 

注意:

这不会再次把它画出来

更新: –

  self.im = "Your Custom image"; 

这将是这样的….

 -(void)eraserConfigure { UIImageView *resizeImage=[[[UIImageView alloc]initWithImage:editedImage]autorelease]; /*UIImage */self.im=[UIImage imageFromView:resizeImage scaledToSize:CGSizeMake(self.editedImageView.frame.size.width, self.editedImageView.frame.size.height)]; } 

我可以用下面的代码解决这个问题:

 CGContextSetBlendMode(UIGraphicsGetCurrentContext(),kCGBlendModeClear); 

参考

使用画笔,但为了颜色使用:

 [UIColor clearColor]