2012-03-29 6 views
5

Ich arbeite an einer App und ich muss eine glatte Linie zeichnen, so folgte ich diesem Link, um die Linie iPhone smooth sketch drawing algorithm zu glätten und ich folgte der Antwort von kyoji. Aber jetzt weiß ich nicht, wie man die Undo Redo Funktionalität implementiert.Wie rückgängig machen und eine glatte Linie im iPhone wiederherstellen?

Bitte helfen Sie

+0

haben Sie versucht, mit der integrierten Klasse NSUndoManager – MCKapur

+0

dies ist verfügbar in Mac OS X v10.0 und höher nicht in iOS. und meine App ist in iOS – Mashhadi

+2

und iOS 3.0 und höher: https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSUndoManager_Class/Reference/Reference.html –

Antwort

0

Verwenden Sie den NSUndoManager. Wenn Sie jedoch Linien auf der Leinwand malen, müssen Sie auch deren Darstellung beibehalten (so dass Sie sie abschneiden können).

Also, ob Sie sie als UIBezierPath sammeln, oder Form Layers oder Ihre eigenen "Array von Punkten" verwenden, die Sie auf die gleiche Weise rückgängig machen.

Zeichnen Sie also beim Zeichnen der Linie die Punkte auf, die Sie in Ihrer Zeichnung verwendet haben. Wenn die Zeichnung fertig ist (z. B. touchesEnded), möchten Sie Ihre Zeichnung "pushen" und dem Rückgängig-Manager mitteilen, wie Sie die Zeichnung rückgängig machen können. Einfach gesagt, es wäre so etwas wie dieser fast-Code sein ...

- (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]; 
} 

Wenn Sie eine Leinwand verwenden, können Sie die ganze Sache neu zeichnen müssen, vor allem, wenn ein Abziehen knallen. Wenn Sie Ansichten oder Ebenen verwenden, können Sie nicht ...

Schauen Sie sich die Dokumentation für NSUndoManager an ... sie ist unter iOS verfügbar und hat gute Beispiele. Es "erinnert" sich daran, wenn Sie es rückgängig machen oder wiederholen, und Sie werden das Richtige tun, also könnte das Obige als eine Funktion implementiert werden (aber es ist einfacher zuerst mit einer Funktion in jede Richtung zu verstehen).

+0

Hallo @ JodyHagins, ich bin auch mit dem Problem des Rückgängigmachens und Wiederherstellen konfrontiert, ich zeichne zu CGLayers, für die Optimierung. Ich habe versucht, Code, aber nicht wissen, wo ich falsch liege, können Sie bitte auf den Code schauen, unten ist der Link http://stackoverflow.com/questions/11394839/undo-redo-issues-with-cglayer. Warte auf deine Antwort, danke – Ranjit