【发布时间】:2012-01-17 08:18:19
【问题描述】:
我正在做一个绘画应用程序。在那,我画了一些图像。但是我想添加撤消操作来删除之前绘制的项目。如何实现该撤消操作?
【问题讨论】:
-
如何存储已经绘制好的对象?答案很大程度上取决于您的代码。 Core Data 有一个很好的撤销/重做机制。
-
我添加了一个按钮来保存绘制的图像。所以,当我点击保存按钮时,它就会存储到核心数据中。
标签: iphone
我正在做一个绘画应用程序。在那,我画了一些图像。但是我想添加撤消操作来删除之前绘制的项目。如何实现该撤消操作?
【问题讨论】:
标签: iphone
有一个名为 TouchPainter 的应用程序,它的源代码可用。它包含绘图、颜色混合、撤消/重做(太棒了..!!)、保存/打开绘图..
注意:这可能需要非常深入的 Objective C 知识。整个应用程序的源代码在这本书“Apress.Pro.Objective-C.Design.Patterns.for.iOS.Mar.2010”中进行了解释和源代码代码也在这里:
http://www.apress.com/apple-mac/objective-c/9781430233305
希望对你有所帮助.. :) 祝你好运..
【讨论】:
【讨论】:
参考这个链接: Design Pattern for Undo Engine
一般来说,您需要实现一个命令模式(或类似的)。 如果一个操作可以反转,(例如,在图形程序中,你放大一个圆),你可以将修改存储在命令中。 否则,您可能必须保存先前状态的深层克隆。
【讨论】:
我会创建一个 NSMutableArray,在上面添加每个操作。
NSMutableArray *ObjectList = [[NSMutableArray alloc] init];
[ObjectList addObject: TheSKSprite1];
[ObjectList addObject: TheSKSprite2];
[ObjectList addObject: TheSKSprite3];
...
然后检索添加的最后一个绘图,将其从视图和数组中删除。
SKSpriteNode *OneDrawing = [ObjectList objectAtIndex:(int)[ObjectList count]-1];
[OneDrawing removeFromParent];
[ObjectList removeObjectAtIndex:(int)[ObjectList count]-1];
希望对你有帮助。
【讨论】: