¿Vista clara del dibujo?

Estoy usando una subclass de UIView para dibujar, esta vista subclasificada se usa para get su firma en un controller de vista. Hay un button claro que se supone que borra la vista UIV, excepto que no funciona. Esto es lo que he intentado.

subclass.h

@implementation subclassed uiview { UIBezierPath *path; UIImage *incrementalImage; // (1) } - (id)initWithCoder:(NSCoder *)aDecoder { if (self = [super initWithCoder:aDecoder]) { [self setMultipleTouchEnabled:NO]; [self setBackgroundColor:[UIColor clearColor]]; path = [UIBezierPath bezierPath]; [path setLineWidth:2.0]; } return self; } - (void)drawRect:(CGRect)rect { [incrementalImage drawInRect:rect]; // (3) [path stroke]; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint p = [touch locationInView:self]; [path moveToPoint:p]; } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint p = [touch locationInView:self]; [path addLineToPoint:p]; [self setNeedsDisplay]; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event // (2) { UITouch *touch = [touches anyObject]; CGPoint p = [touch locationInView:self]; [path addLineToPoint:p]; [self drawBitmap]; // (3) [self setNeedsDisplay]; [path removeAllPoints]; //(4) } - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { [self touchesEnded:touches withEvent:event]; } - (void)drawBitmap // (3) { UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0.0); //[[UIColor blackColor] setStroke]; if (!incrementalImage) { // first draw; UIBezierPath *rectpath = [UIBezierPath bezierPathWithRect:self.bounds]; // enclosing bitmap by a rectangle defined by another UIBezierPath object [[UIColor clearColor] setFill]; [rectpath fill]; // fill it } [incrementalImage drawAtPoint:CGPointZero]; [path stroke]; incrementalImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); } @end 

ver controller.m

 - (IBAction)clearTapped:(id)sender { self.subclassedView.backgroundColor = [UIColor clearColor]; CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor); CGContextFillRect(context,self.subclassedView.bounds); CGContextClearRect(context, self.subclassedView.bounds); CGContextFlush(context); [self.subclassedView setNeedsDisplay]; } 

¿Alguien puede decirme por qué esto no funciona y qué debo hacer en su lugar?

Reinicia la variable de ruta y fuerza la vista para dibujar con esta ruta vacía recién creada. Esto da la printing de borrar la ruta dibujada anterior. En su subclass incluya esta function,

 - (void)erase { path = nil; //Set current path nil path = [UIBezierPath bezierPath]; //Create new path [self setNeedsDisplay]; } 

Declare este método en el file .h de su subclass. Desde la class de controller de vista, debe llamar a este método cada vez que necesite borrar la vista,

 - (IBAction)clearTapped:(id)sender { [self.subclassedView erase]; } 

Pruébalo.

¡Espero que ayude!

Seguramente funcionará … garantizado … Además de la respuesta de @Amar y el comentario de @Josue … thanx para ambos

 - (void)erase { path = nil; //Set current path nil path = [UIBezierPath bezierPath]; //Create new path incrementalImage = nil; [self setNeedsDisplay]; }