10

I'm trying to do a simple drawing app for the iPad where you can draw on a picture, and I'm using CGContext stuff to do it but the way I originally planned on handling erasing was to just draw over stuff with white...except I just realized today that it doesn't work when you're drawing onto another image because then when you "erase" you'll also "erase" the background image as well.

Is there any way to support actual erasing?

Thanks!

Lindsey
  • 235
  • 3
  • 11

3 Answers3

26

I also needed erasing functionality. Based on @Jeremy's answer, here is what worked for me:

CGContextRef cgref = UIGraphicsGetCurrentContext();

if(erase == TRUE) // Erase to show background
{
    CGContextSetBlendMode(cgref, kCGBlendModeClear);
}
else // Draw with color
{
    CGContextSetBlendMode(cgref, kCGBlendModeNormal);
}
Eden
  • 1,110
  • 1
  • 12
  • 18
  • you are my hero, thank you so much for giving such a simple solution! – Bek Nov 22 '12 at 11:08
  • 2
    First off I'm going by Ray Wenderlich's tutorial for creating a simple drawing app. Everything works for it, but when I change the blend mode to kCGBlendModeClear all it does is erase the whole canvas once touches ended gets called. Any thoughts? – Ron Dear May 01 '14 at 22:14
  • Excellent, though too verbose. You can do the same with a one-liner: `CGContextSetBlendMode(UIGraphicsGetCurrentContext(), erase ? kCGBlendModeClear : kCGBlendModeNormal);` – SaltyNuts Oct 30 '14 at 17:16
4

Display the user's drawing in a layer above the image. Then erasing is as simple as drawing a transparent patch on the drawing layer in order to let the image pixels below it show through.

Jeremy W. Sherman
  • 35,901
  • 5
  • 77
  • 111
0

Clear all CGContextRef drawings:

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, self.bounds);
[self setNeedsDisplay];
Ofir Malachi
  • 1,145
  • 14
  • 20