Próbuję zaimplementować NSUndoManager
w mojej aplikacji na iOS. Mam funkcjonalność cofania do działania, ale nie część redo. Jestem całkiem nowy w rozwoju iOS i po raz pierwszy użyłem NSUndoManager
, więc prawdopodobnie jest to trochę trywialne.Trudności z implementacją funkcji ponownego wywoływania NSUndoManager
Moja aplikacja jest aplikacją do robienia zdjęć/notatek, mam stos cofania/ponawiania z ostatnimi dziesięcioma UIImage
s (nie wiem, czy jest to najbardziej efektywny sposób) w tablicy. Gdy użytkownik wprowadza zmiany w bieżącym obrazie, stary obraz jest przesyłany na stos, a pierwszy obraz w tablicy jest usuwany, jeśli macierz ma już dziesięć obiektów. Mam zmienną instancji int
, której używam do śledzenia obiektów w tablicy i upewnienia się, że wyświetlany jest właściwy obraz. Mój kod wygląda następująco:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
if (oldImagesArrays.count >= 10) {
[oldImagesArrays removeObjectAtIndex:0];
}
UIImage * currentImage = pageView.canvas.image;
if (currentImage != nil) {
[oldImagesArrays addObject:currentImage];
undoRedoStackIndex = oldImagesArrays.count -1;
}
[...]
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
UIImage * currentImage = [oldImagesArrays lastObject];
if (currentImage != pageView.canvas.image) {
[undoManager registerUndoWithTarget:self selector:@selector(resetImage)
object:currentImage];
}
}
// Gets called when the undo button is clicked
- (void)undoDrawing
{
[undoManager undo];
[undoManager registerUndoWithTarget:self
selector:@selector(resetImage)
object:pageView.canvas.image];
undoRedoStackIndex--;
}
// Gets called when the redo button is clicked
- (void)redoDrawing
{
[undoManager redo];
undoRedoStackIndex++;
}
- (void)resetImage
{
NSLog(@"Hello"); // This NSLog message only appears when I click undo.
pageView.canvas.image = [oldImagesArrays objectAtIndex:undoRedoStackIndex];
}
Kiedy klikam cofnąć lub ponowić przycisków resetImage powinno się nazywa, i ustawić aktualny obraz do następnego lub poprzedniego obiektu w moim obrazu stosu (bieżącą wartość undoRedoStackIndex) , dzieje się tak tylko wtedy, gdy klikam Cofnij, ale nie ponawiam.
Rozwiązania & & || Lepsze sposoby robienia tego będą mile widziane.
@JoshCaswell Dodałem trochę wyjaśnień do mojego pytania. – Anders