2012-03-29 8 views
5

Pracuję nad aplikacją i muszę narysować gładką linię, więc podążyłem za tym linkiem, aby wygładzić linię iPhone smooth sketch drawing algorithm i podążyłem za odpowiedzią kyoji. Ale teraz nie wiem, jak zaimplementować funkcję Cofnij ponowne wykonanie.Jak cofnąć i ponowić płynną linię w telefonie iPhone?

Proszę pomóc

+0

Czy próbowałeś używać wbudowanej klasy NSUndoManager – MCKapur

+0

to jest dostępne w systemie Mac OS X 10.0 i nowszym, nie w systemie iOS. a moja aplikacja jest w iOS – Mashhadi

+2

i iOS 3.0 i nowszych: https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSUndoManager_Class/Reference/Reference.html –

Odpowiedz

0

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).

+0

Witaj @JodyHagins, mam również do czynienia z problemem cofania i ponawiania, rysuję do CGLayers, dla optymalizacji. Próbowałem trochę kodu, ale nie wiem, gdzie się nie mylę, czy możesz spojrzeć na kod, poniżej jest link http://stackoverflow.com/questions/11394839/undo-redo-issues-with-cglayer. Czekam na twoją odpowiedź, dziękuję – Ranjit