I wam trying to implement the cancel button, everything works fine, and I can cache the action, but somehow the previously drawn lines are still there, they should disappear with every unoclick action. Please, help
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { path = [[UIBezierPath alloc] init]; mouseSwiped = NO; UITouch *touch = [touches anyObject]; lastPoint = [touch locationInView:self.view]; CGPoint p = [touch locationInView:self.view]; [path moveToPoint:p]; [pathArray addObject:path]; // NSLog(@"%@",pathArray); } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { mouseSwiped = YES; UITouch *touch = [touches anyObject]; CGPoint currentPoint = [touch locationInView:self.view]; CGPoint p = [touch locationInView:self.view]; [path addLineToPoint:p]; UIGraphicsBeginImageContext(self.view.frame.size); [self.tempDrawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y); CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); CGContextSetLineWidth(UIGraphicsGetCurrentContext(), brush ); CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, 1.0); CGContextSetBlendMode(UIGraphicsGetCurrentContext(),kCGBlendModeNormal); CGContextStrokePath(UIGraphicsGetCurrentContext()); self.tempDrawImage.image = UIGraphicsGetImageFromCurrentImageContext(); [self.tempDrawImage setAlpha:opacity]; UIGraphicsEndImageContext(); lastPoint = currentPoint; [self.view setNeedsDisplay]; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint p = [touch locationInView:self.view]; [path addLineToPoint:p]; if(!mouseSwiped) { UIGraphicsBeginImageContext(self.view.frame.size); [self.tempDrawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); CGContextSetLineWidth(UIGraphicsGetCurrentContext(), brush); CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, opacity); CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); CGContextStrokePath(UIGraphicsGetCurrentContext()); CGContextFlush(UIGraphicsGetCurrentContext()); self.tempDrawImage.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); } UIGraphicsBeginImageContext(self.mainImage.frame.size); [self.mainImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) blendMode:kCGBlendModeNormal alpha:1.0]; [self.tempDrawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) blendMode:kCGBlendModeNormal alpha:opacity]; self.mainImage.image = UIGraphicsGetImageFromCurrentImageContext(); self.tempDrawImage.image = nil; UIGraphicsEndImageContext(); [self mainImage]; [self.view setNeedsDisplay]; [path removeAllPoints]; }
with the following undo function, and the patharray counter decreases with every click, but the drawing lines still exist
-(IBAction)undoButtonClicked:(id)sender { NSLog(@"%s", __FUNCTION__); NSLog(@"pathArray count is %i", [pathArray count]); if([pathArray count]>0){ UIBezierPath *_path=[pathArray lastObject]; [bufferArray addObject:_path]; [pathArray removeLastObject];