【发布时间】:2013-02-07 16:01:48
【问题描述】:
我正在尝试使用 Objective-C 开发一个 iPhone 应用程序(演示项目),它可以将多种摄影效果应用于图像。
应用程序已启动并正在运行,但我想在 UI 中实现“撤消”和“重做”功能。我已经成功编写了一级撤消重做代码,即轻松地向后或向前一步。但是当合并多个级别的撤消和重做操作时,这个概念会变得复杂。当用户撤消一系列步骤然后分支到做其他事情时,它变得特别模糊。我试图拯救的状态越多,我就越迷惑。
我想知道是否有实施此类操作的标准最佳做法。我应该使用的任何架构或框架?这样做的普遍接受的程序是什么?任何有关简化此方法的一般建议将不胜感激。
请帮忙。
【问题讨论】:
-
尝试在您的应用中实现存档和未存档的概念...
-
您的应用程序的复杂程度和内存密集程度如何?您可以只实现一个堆栈,并使用 push/pop 范例向前和向后移动。
-
您是建议存档字符串表示正在应用的效果还是将图像存档为对象本身?我想过……但觉得第一种方法可能有点难以解码和管理,第二种方法会给记忆带来灾难。但是,如果不尝试,我不能确定。不过,感谢您的建议。
-
@Bergasms:相当消耗内存。 Stack 绝对是好的和简单的,但我想知道当用户返回几步并创建一个新分支时会发生什么。你不认为树结构更适合这个目的吗?此外,当我从堆栈中推送/弹出效果时......我是否会实时将效果应用于显示的视图?回到之前的效果是相当复杂的。因此,每次用户后退一步时,我都必须从根节点开始并遍历整个堆栈以到达第 (n-1) 步。您对此有何看法?
-
@user2041826 您可以在堆栈中而不是树中跟踪您的操作,因为树会增加您的复杂性。
标签: iphone ios objective-c xcode undo-redo