У меня есть приложение для рисования, в котором я хотел бы создать метод отмены.Рисование происходит внутри метода TouchesMoved:
Я пытаюсь создать CGContextRef и поместить его в стек ИЛИ сохранить его в свойстве контекста, которое можно восстановить позже, но мне не повезло.Будем признательны любому совету.Вот что у меня есть ...
UIImageView *drawingSurface;
CGContextRef undoContext;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UIGraphicsBeginImageContext(self.view.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[drawingSurface.image drawInRect:CGRectMake(0, 0, drawingSurface.image.size.width, drawingSurface.image.size.height)];
UIGraphicsPushContext(context);
// also tried but cant figure how to restore it
undoContext = context;
UIGraphicsEndImageContext();
}
Тогда у меня есть метод, который запускается моей кнопкой отмены ...
- (IBAction)restoreUndoImage {
UIGraphicsBeginImageContext(self.view.frame.size);
UIGraphicsPopContext();
drawingSurface.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
Когда я запускаю это, я считаю, что мой DrawingSurface работаетназначил ноль, потому что он просто стирает все на изображении.
Я думаю, я не могу использовать pop и push таким образом.Но я не могу понять, как просто сохранить контекст и затем вернуть его обратно на DrawingSurface.Хммм.Любая помощь будет ... ну ... полезной.Заранее спасибо -
И, просто для справки, вот что я делаю, чтобы нарисовать на экране, который прекрасно работает.Это внутри моего TouchesMoved:
UIGraphicsBeginImageContext(self.view.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[drawingSurface.image drawInRect:CGRectMake(0, 0, drawingSurface.image.size.width, drawingSurface.image.size.height)];
CGContextSetLineCap(context, kCGLineCapRound); //kCGLineCapSquare, kCGLineCapButt, kCGLineCapRound
CGContextSetLineWidth(context, self.brush.size); // for size
CGContextSetStrokeColorWithColor (context,[currentColor CGColor]);
CGContextBeginPath(context);
CGContextMoveToPoint(context, lastPoint.x, lastPoint.y);
CGContextAddLineToPoint(context, currentPoint.x, currentPoint.y);
CGContextStrokePath(context);
drawingSurface.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();