Simple iPhone drawing app with Quartz 2D
- by Mr guy 4
I am making a simple iPhone drawing program as a personal side-project.
I capture touches event in a subclassed UIView and render the actual stuff to a seperate CGLayer.  After each render, I call [self setNeedsLayout] and in the drawRect: method I draw the CGLayer to the screen context.
This all works great and performs decently for drawing rectangles.  However, I just want a simple "freehand" mode like a lot of other iPhone applications have.   
The way I thought to do this was to create a CGMutablePath, and simply:
CGMutablePathRef path;
-(void)touchBegan {
    path = CGMutablePathCreate();
}
-(void)touchMoved {
    CGPathMoveToPoint(path,NULL,x,y);
    CGPathAddLineToPoint(path,NULL,x,y);
}
-(void)drawRect:(CGContextRef)context {
      CGContextBeginPath(context);
      CGContextAddPath(context,path);
      CGContextStrokePath(context);
}
However, after drawing for more than 1 second, performance degrades miserably.  
I would just draw each line into the off-screen CGLayer, if it were not for variable opacity!  The less-than-100% opacity causes dots to be left on the screen connecting the lines.   I have looked at CGContextSetBlendingMode() but alas I cannot find an answer.
Can anyone point me in the right direction?  Other iPhone apps are able to do this with very good efficiency.