我想在我的iOS應用程序來實現的NSUndoManager
。我獲得了撤消功能,但不是重做部分。我對iOS開發很陌生,這是我第一次使用NSUndoManager
,所以它可能是微不足道的。難度實施NSUndoManager重做功能
我的應用程序是一個繪畫/筆記應用程序,我有一個撤銷/重做堆棧與最後十個UIImage
(我不知道這是否是最有效的方式)在一個數組中。當用戶對當前圖像進行更改時,舊圖像將被壓入堆棧,並且如果陣列中已有十個對象,則陣列中的第一個圖像將被刪除。我有,我用它來跟蹤數組中的對象,並確保正確的圖像顯示在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的電流值) ,這隻發生在我點擊撤消時,但不是重做。
解決方案& & ||更好的方法來做到這一點,將不勝感激。
@JoshCaswell我增加了一些澄清我的問題。 – Anders