使用NSUndoManager撤消和重做操作遇到问题

时间:2019-08-22 10:39:46

标签: ios objective-c nsundomanager

我将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];
}

0 个答案:

没有答案
相关问题