Użyj NSUndoManager. Jeśli jednak malujesz linie na płótnie, będziesz musiał również zachować ich reprezentację (abyś mógł je wysadzić).
Tak więc, niezależnie od tego, czy zbierasz je jako UIBezierPath, czy używasz warstw kształtu, czy też własnej "tablicy punktów", cofasz w ten sam sposób.
Podczas rysowania linii należy zachować zapis punktów użytych w rysunku. Po zakończeniu rysowania (np. Dotknij Wył.), Chcesz "popchnąć" swój rysunek i powiadomić menedżera cofania, jak go cofnąć. Wystarczy, że będzie to coś jak ten niemal kodzie ...
- (void)pushDrawing:(Drawing*)drawing
{
[self.stack push:drawing];
[self.undoManager registerUndoWithTarget: self
selector: @selector(popDrawing)
object: nil];
}
- (void)popDrawing:(Drawing*)drawing
{
Drawing *drawing = [self.stack pop];
[self.undoManager registerUndoWithTarget: self
selector: @selector(pushDrawing:)
object: drawing];
}
Jeśli używasz jednego płótna, może trzeba przerysować całą rzecz, zwłaszcza gdy popping odciągania. Jeśli używasz widoków lub warstw, możesz nie ...
Zobacz dokumenty dla NSUndoManager ... jest dostępny na iOS i ma dobre przykłady. "Zapamiętuje", jeśli cofasz lub ponawiasz, i postąpisz słusznie, więc powyższe może zostać zaimplementowane jako jedna funkcja (ale na początku łatwiej jest zrozumieć, gdy jedna funkcja biegnie w każdym kierunku).
Czy próbowałeś używać wbudowanej klasy NSUndoManager – MCKapur
to jest dostępne w systemie Mac OS X 10.0 i nowszym, nie w systemie iOS. a moja aplikacja jest w iOS – Mashhadi
i iOS 3.0 i nowszych: https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSUndoManager_Class/Reference/Reference.html –