我创建了一个没有核心数据的应用程序。该应用程序具有许多功能,例如使用手势,颜色和文本操作视图。
我想做的是使用撤消和重做功能。
我阅读了有关Core Data和NSUndoManager的所有内容,但我很难理解它,因为我正在尝试做的一切都...不工作。
我的问题是:是否可以在没有核心数据的情况下使用NSUndoManager?
以及:如何实现视图的取消?
一个操作可以更改我的对象,称为 aView (UIImageView)我在撤消管理器中注册了信息
编辑
- (IBAction)rotationDetected:(UIRotationGestureRecognizer *)gestureRecognizer {
static CGFloat initialRotation;
if (gestureRecognizer.state == UIGestureRecognizerStateBegan){
initialRotation = atan2f(gestureRecognizer.view.transform.b, gestureRecognizer.view.transform.a);
}
CGFloat newRotation = initialRotation + gestureRecognizer.rotation;
aView.transform = CGAffineTransformMakeRotation(newRotation);
//undo
[self.undoManager registerUndoWithTarget:self selector:@selector(rotationDetected:)object:aView];
[self.undoManager setActionName:NSLocalizedString(@"viewChanged",@"title undo")];
}
下面描述了由单击的按钮调用的撤消方法:
-(void)undo: (id) sender{
[aView.undoManager undo];
[[self undoManager] undo];
}
如果我插入一个 if 子句询问 undoManager.canUndo == 是,它会返回 undoManager 无法撤消。
这意味着撤消管理器为零,但为什么呢?我错过了什么吗?
是的,您可以将NSUndoManager
与核心数据分开使用。关于NSUndoManager的大量信息。
你需要做更多的阅读,了解NSUndoManager
能为你做什么和不能做什么,看看它如何适应UIViews等。也许暂时忘记核心数据,专注于NSUndoManager
.
"因为我试图做的一切...不要工作" - 如果你有特定的问题,你可以在StackOverflow上提出关于它们的问题。如果您只说"它不起作用",我们无法为您提供细节帮助。
除了NSUndoManager
的细节之外,还有与撤消和重做操作相关的设计模式,例如命令模式。例如,请参阅"撤消"功能的最佳设计模式。