【问题标题】:how to implement undo operation in painting app如何在绘画应用中实现撤消操作
【发布时间】:2012-01-17 08:18:19
【问题描述】:

我正在做一个绘画应用程序。在那,我画了一些图像。但是我想添加撤消操作来删除之前绘制的项目。如何实现该撤消操作?

【问题讨论】:

  • 如何存储已经绘制好的对象?答案很大程度上取决于您的代码。 Core Data 有一个很好的撤销/重做机制。
  • 我添加了一个按钮来保存绘制的图像。所以,当我点击保存按钮时,它就会存储到核心数据中。

标签: iphone


【解决方案1】:

有一个名为 TouchPainter 的应用程序,它的源代码可用。它包含绘图、颜色混合、撤消/重做(太棒了..!!)、保存/打开绘图..

注意:这可能需要非常深入的 Objective C 知识。整个应用程序的源代码在这本书“Apress.Pro.Objective-C.Design.Patterns.for.iOS.Mar.2010”中进行了解释和源代码代码也在这里:

http://www.apress.com/apple-mac/objective-c/9781430233305

希望对你有所帮助.. :) 祝你好运..

【讨论】:

    【解决方案2】:

    这是Memento pattern

    【讨论】:

      【解决方案3】:

      参考这个链接: Design Pattern for Undo Engine

      一般来说,您需要实现一个命令模式(或类似的)。 如果一个操作可以反转,(例如,在图形程序中,你放大一个圆),你可以将修改存储在命令中。 否则,您可能必须保存先前状态的深层克隆。

      【讨论】:

        【解决方案4】:

        我会创建一个 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];
        

        希望对你有帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-12-13
          • 2011-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-28
          • 1970-01-01
          相关资源
          最近更新 更多