如何在绘图应用程序中撤消和重做操作

时间:2011-12-12 15:19:05

标签: iphone ios

我是iPhone应用程序开发的新手。

我编写代码来绘制和擦除但是,我无法进行撤消和重做操作。

我在我的应用程序中使用了CoreGraphics。请帮我修复撤消重做问题。

由于

2 个答案:

答案 0 :(得分:0)

看看Command Pattern

一种常见的技术是保留一堆最近执行的命令(在您的情况下调用CGContext函数)并使用它来实现撤消和重做行为。

答案 1 :(得分:0)

几年前我在Flash中整理了一个草图应用程序并实现了撤消/重做功能。我不知道这是正确的做法(可能不是),但我可以给你一个关于我所做的高级别观点。

基本概念是这样的(就像安迪所提到的):有一堆最近执行的动作。如果可以,请让“撤消”操作真正撤消上一个操作。将此“撤消”操作放入不同的堆栈,以便您可以提供“重做”功能。当有人点击“重做”时,做同样的事情,但反过来 - 在“重做”堆栈中执行操作并将其放入另一个堆栈。一旦有人做了新的事情(即,不是“重做”或“撤消”),摆脱“重做”堆栈并开始添加到主堆栈。

对我来说有趣的是,我无法找到一种方法来真正“撤消”一个动作(即,我不知道如何画出一个中风)。我做的是我画了所有笔画到最后一个动作。你可以想象,这不是很有效率。我通过堆栈堆栈使它更有效率。这样,最新的“撤消”操作只需撤消最后一个堆栈的操作,而不是所有操作的整个历史记录。

希望这有帮助!