Я пытаюсь реализовать NSUndoManager
в своем приложении для iOS. У меня заработала функция отмены, но не часть повтора. Я новичок в разработке iOS и впервые использую NSUndoManager
, так что, вероятно, это что-то тривиальное.
Мое приложение - это приложение для рисования / создания заметок, у меня есть стек отмены / повтора с последними десятью UIImage
s (я не знаю, является ли это наиболее эффективным способом) в массиве. Когда пользователь вносит изменения в текущее изображение, старое изображение помещается в стек, а первое изображение в массиве удаляется, если в массиве уже есть десять объектов. У меня есть переменная экземпляра int
, которую я использую для отслеживания объектов в массиве и обеспечения отображения правильного изображения. Мой код выглядит так:
- (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];
}
Когда я нажимаю кнопки отмены или повтора, должен вызываться resetImage и устанавливать текущее изображение на следующий или предыдущий объект в моем стеке изображений (текущее значение undoRedoStackIndex) , это происходит только тогда, когда я нажимаю кнопку «Отменить», но не повторяю.
Решения && || были бы признательны за лучшие способы сделать это.