如何撤消&在iPhone中重做流畅的线条?

时间:2012-03-29 12:55:38

标签: iphone drawing line

我正在开发一个应用程序,我必须绘制一条平滑的线条,所以我按照此链接平滑了行iPhone smooth sketch drawing algorithm,然后我按照kyoji的回答。但现在我不知道如何实现撤消重做功能。

请帮忙

1 个答案:

答案 0 :(得分:0)

使用NSUndoManager。但是,如果你在画布上画线,你也需要保持它们的表示(所以你可以将它们弹出)。

因此,无论您是将它们收集为UIBezierPath,还是使用形状图层,或者您自己的“数组点”,都会以相同的方式撤消。

因此,在绘制线条时,记录您在绘图中使用的点。当绘图完成时(例如,touchesEnded),您想要“推”您的绘图,并告诉撤消管理器如何撤消它。简单地说,它就像这样几乎是代码......

- (void)pushDrawing:(Drawing*)drawing
{
    [self.stack push:drawing];
    [self.undoManager registerUndoWithTarget: self
                                    selector: @selector(popDrawing)
                                      object: nil];
}

- (void)popDrawing:(Drawing*)drawing
{
    Drawing *drawing = [self.stack pop];
    [self.undoManager registerUndoWithTarget: self
                                    selector: @selector(pushDrawing:)
                                      object: drawing];
}

如果您使用的是一个画布,则可能需要重绘整个画布,尤其是在弹出绘图时。如果您使用的是视图或图层,则可能不会......

查看NSUndoManager的文档...它可以在iOS上使用,并且有很好的例子。它会“记住”你是否撤消或重做,并且会做正确的事情,所以上面的内容可以作为一个函数来实现(但是一开始就更容易理解,每个方向都有一个函数)。