Utilizzare NSUndoManager. Tuttavia, se stai dipingendo delle linee sulla tela, dovrai anche mantenerne la rappresentazione (in modo da poterle escludere).
Quindi, se li si raccoglie come UIBezierPath, o si utilizzano i livelli di forma, o il proprio "array di punti" si annulla nello stesso modo.
Quindi, mentre si disegna la linea, mantenere una registrazione dei punti utilizzati nel disegno. Quando il disegno è terminato (ad es. TouchesEnded), vuoi "spingere" il disegno e dire al gestore di annullamento come annullarlo. Semplicemente, sarebbe qualcosa come questo quasi-code ...
- (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];
}
Se si utilizza uno tela, potrebbe essere necessario ridisegnare l'intera cosa, soprattutto quando schioccare una svinatura. Se si utilizza una vista o strati, non si può ...
Guardate la documentazione per NSUndoManager ... è disponibile su iOS, e ha buoni esempi. Si "ricorda" se annulli o ripristini e farai la cosa giusta, quindi quanto sopra potrebbe essere implementato come una funzione (ma è più facile capire all'inizio con una funzione che va in ogni direzione).
fonte
2012-04-10 18:56:32
hai provato a utilizzare la classe integrata NSUndoManager – MCKapur
questa opzione è disponibile in Mac OS X v10.0 e versioni successive non in iOS. e la mia app è in iOS – Mashhadi
e iOS 3.0 e versioni successive: https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSUndoManager_Class/Reference/Reference.html –