我将NSUndoManager
用于撤消和重做选项。我将视图从一个地方拖到另一个地方。拖动完成了多次。现在,如果要撤消其工作正常。它移到第一位。但是,如果我重做,最后一个动作将丢失。我用平移手势拖动。开始拖动时,我将以前的位置保存在撤消管理器中。 问题是最后一个操作未保存在撤消管理器中。如果我重做,则第一个操作是视图的当前操作。因此视图不会移动,因为第一个操作已经保存了撤消管理器。如何处理这种情况。
此代码是对执行撤消管理器的调用。
-(void)handlePan:(UIPanGestureRecognizer *)recognizer {
CGPoint translation = [recognizer translationInView:self.view];
if ([recognizer state] == UIGestureRecognizerStateBegan){
[self subviewMoved:recognizer.view center:recognizer.view.center];
}
UIView *subView = recognizer.view;
subView.center = CGPointMake(subView.center.x + translation.x,
subView.center.y + translation.y);
[recognizer setTranslation:CGPointZero inView:self.view];
}
这是撤消方法。
-(void)subviewMoved:(UIView*)view center:(CGPoint)origin{
view.center = origin;
[[undoManager prepareWithInvocationTarget:self]subviewMoved:view center:origin];
}