У меня есть приложение для рисования, в котором я хотел бы создать метод отмены. Чертеж выполняется внутри метода TouchesMoved:.Сохранение CGContextRef
Я пытаюсь создать 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 и нажимать таким образом. Но я не могу понять, как просто сохранить контекст, а затем вернуть его обратно на рисунок. Хммм. Любая помощь будет ... ну ... полезной. Заранее спасибо -
И только для справки, вот что я делаю, чтобы рисовать на экране, который отлично работает. Это внутри моего 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();
Фантастический, продуманный ответ. Не знаю, почему OP не согласился с этим. – Tim