Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iPhone中实现撤消重做的最佳实践_Iphone_Ios_Objective C_Xcode_Undo Redo - Fatal编程技术网

在iPhone中实现撤消重做的最佳实践

在iPhone中实现撤消重做的最佳实践,iphone,ios,objective-c,xcode,undo-redo,Iphone,Ios,Objective C,Xcode,Undo Redo,我正在尝试使用objective-C开发一个iPhone应用程序(演示项目),它可以对图像应用多种摄影效果 应用程序已启动并正在运行,但我考虑在UI中实现“撤消”和“重做”功能。我已经成功地编写了一级撤消重做代码,即轻松地后退或前进一步。但是,当合并多个级别的撤消和重做操作时,这个概念会变得复杂。当用户撤销一系列步骤,然后转移到做其他事情时,它变得特别模糊。我试图拯救的州越多,我就越容易上当受骗 我想知道是否有一个标准的最佳实践来实施这类行动。我应该使用什么架构或框架?一般公认的程序是什么?任何

我正在尝试使用objective-C开发一个iPhone应用程序(演示项目),它可以对图像应用多种摄影效果

应用程序已启动并正在运行,但我考虑在UI中实现“撤消”和“重做”功能。我已经成功地编写了一级撤消重做代码,即轻松地后退或前进一步。但是,当合并多个级别的撤消和重做操作时,这个概念会变得复杂。当用户撤销一系列步骤,然后转移到做其他事情时,它变得特别模糊。我试图拯救的州越多,我就越容易上当受骗

我想知道是否有一个标准的最佳实践来实施这类行动。我应该使用什么架构或框架?一般公认的程序是什么?任何关于简化此方法的一般性建议都将不胜感激


请帮助。

这一切都取决于您如何处理图像

如果您正在玩图像,您可以使用NSUndoManager,在那里您可以跟踪图像处理

否则,您可以跟踪在映像上执行的一系列操作,这是不太可取的

但这一切都取决于你的要求和你如何处理你的形象

重要的是要注意你在这类动作中的记忆力


如果您想在下次加载应用程序时重用您的操作,您可以使用NSKeyArchiever

尝试在你的应用程序中实现归档和未归档的概念…你的应用程序有多复杂和内存密集?您可以只实现一个堆栈,并使用push/pop范式向前和向后移动。您是建议使用表示应用效果的存档字符串,还是将图像本身作为对象存档?我想了想。。。但感觉第一种方法可能有点难以解码和管理,第二种方法可能会给内存带来灾难。但是,如果不尝试一下,我就不能确定。不过,谢谢你的建议。@Bergasms:记忆相当丰富。堆栈确实很好而且简单,但我想知道当用户返回几个步骤并创建一个新分支时会发生什么。你不认为树形结构更适合这个目的吗?此外,当我从堆栈中推/弹出效果时。。。我是否一直对显示的视图实时应用效果?回到以前的效果是相当复杂的。所以,每次用户返回一步,我都必须从根节点开始,遍历整个堆栈,到达第(n-1)步。您对此有何想法?@user2041826您可以在堆栈中而不是树中跟踪您的操作,因为树会增加您的复杂性。不,我不想在下次加载时重用我的操作。NSUndoManager听起来是个不错的选择。我将开始探索这个。。。。但我必须说,一旦一系列的效果被应用到一幅图像上,就没有其他功能可以一步一步地消除这些效果。所以,据我所知,我必须为我应用的每个步骤管理一个缓冲区视图,对吗?如果我错了,请纠正我。。。但这可能会给记忆带来相当大的压力。你是在修改后的图像上应用新效果还是在每个动作中使用原始图像?@CrazyCreator:是的,这些效果相互叠加。第一步使用原始图像。@user2041826然后您可以将图像保存在archieve中并将其序列化,这是我发现的最佳做法,当用户撤消操作时,只需加载图像并更新archieve即可。希望这听起来是个不错的概念。这种归档概念对我来说是新概念。你可以分享一个链接,我可以在那里找到更多关于这个的信息吗?特别是应用于撤消重做时。