如何清除CGContextRef?

时间:2012-08-28 17:57:24

标签: iphone ios uikit core-graphics cgcontextref

我尝试在ipad上创建一个简单的手指绘画应用程序。我能够正确地绘制到屏幕的路径,但我希望有一个选项可以完全清除所有绘制路径的屏幕。我当前的代码清除了上下文,但是当我调用绘图代码块时,所有路径都会重新出现在屏幕上。

- (void)drawRect:(CGRect)rect
{
   //Drawing code
   CGContextRef context = UIGraphicsGetCurrentContext();

     if(clearContext == 0){

        CGContextSetLineWidth(context, 6);
        CGContextSetRGBStrokeColor(context, 1, 0, 0, 1);
        CGContextAddPath(context, drawingPath);

        CGContextStrokePath(context);
     }
     if(clearContext == 1){

      //This is the code I currently have to clear the context, it is clearly wrong
      //Just used as experimentation.

      CGContextSetBlendMode(context, kCGBlendModeClear);
      CGContextAddPath(context, drawingPath);
      CGContextStrokePath(context);
      clearContext = 0;

     }

}

2 个答案:

答案 0 :(得分:4)

我假设drawingPath是一个CGPath ... 你在清理那个CGPath吗?这可能是你的问题的原因

在清除路径的行动中,执行:

CGPathRelease(drawingPath);
drawingPath = CGPathCreateMutable();
[self setNeedsDisplay];

并做你通常做的正常绘画。如果路径为空,则不会绘制任何内容

答案 1 :(得分:0)

清除所有CGContextRef图形:

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, self.bounds); //self.bounds = your drawing base frame
[self setNeedsDisplay];