我正在开发一个应用程序,我必须绘制一条平滑的线条,所以我按照此链接平滑了行iPhone smooth sketch drawing algorithm,然后我按照kyoji
的回答。但现在我不知道如何实现撤消重做功能。
请帮忙
答案 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上使用,并且有很好的例子。它会“记住”你是否撤消或重做,并且会做正确的事情,所以上面的内容可以作为一个函数来实现(但是一开始就更容易理解,每个方向都有一个函数)。