Eksperymentuję z tworzeniem prostej aplikacji do malowania palcami na iPadzie. Potrafię poprawnie narysować ścieżkę do ekranu, ale chcę mieć opcję, która całkowicie czyści ekran ze wszystkich narysowanych ścieżek. Kod, który aktualnie posiadam, czyści kontekst, ale kiedy wywołam blok kodu rysowania, wszystkie ścieżki pojawiają się ponownie na ekranie.

- (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;

     }

}
1
Michael 28 sierpień 2012, 21:57

2 odpowiedzi

Najlepsza odpowiedź

Zakładam, że drawingPath to CGPath… czy kasujesz tę CGPath? to może być przyczyną twojego problemu

W akcji, aby oczyścić swoją drogę, wykonaj:

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

I wykonaj normalny rysunek, który zwykle robisz. jeśli ścieżka jest pusta, nic nie zostanie narysowane

4
Ismael 28 sierpień 2012, 22:04

Wyczyść wszystkie rysunki CGContextRef:

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, self.bounds); //self.bounds = your drawing base frame
[self setNeedsDisplay];
0
Ofir Malachi 20 lipiec 2020, 00:14