Как очистить 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;

     }

}

person Michael    schedule 28.08.2012    source источник


Ответы (2)


я предполагаю, что DrawingPath - это CGPath ... вы очищаете этот CGPath? это может быть причиной вашей проблемы

в действии, чтобы очистить свой путь, выполните:

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

и сделайте обычный рисунок, который вы обычно делаете. если путь пустой, ничего не будет нарисовано

person Ismael    schedule 28.08.2012
comment
Работает отлично... Спасибо! - person Michael; 28.08.2012

Очистить все рисунки CGContextRef:

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