【问题标题】:How to use NSUndoManager with a UIImageView or CGContext如何将 NSUndoManager 与 UIImageView 或 CGContext 一起使用
【发布时间】:2010-12-26 20:02:34
【问题描述】:

我有一个应用程序,它使用 cgcontext 将事物绘制到用户使用触摸事件绘制的 UIImageView 上,并且我希望能够撤消用户绘制的图形。

编辑:


我正在尝试使用我的 touchesBegan 将触摸开始时的 UIImage 保存到NSUndoManager


然后我如何使用它来使用 UIAlertView 撤消。
意思是,我想从我的 UIAlertView 调用一个方法,该方法撤消然后另一个将重做,但我不知道如何完成此操作。
请帮忙

【问题讨论】:

    标签: iphone uiimageview undo cgcontext


    【解决方案1】:

    我为 iPhone (http://www.layersforiphone.com/) 编写图形软件,我花了一段时间试图弄清楚这一点。问题是,CGContext 本质上不是“可撤销的”。您不能取消填充矩形或恢复已绘制的部分。只是数据不存在。根据我的经验,最好的办法是创建一个“保存”方法,该方法查看正在更改的区域并将该区域中的图像数据保存到撤消堆栈中,然后再执行绘制操作。然后,当您决定撤消时,您可以将修改后的区域从您保存的数据中恢复。

    我选择在 Layers 中独立于 NSUndoManager 实现该方法,因为您基本上需要一堆 CGImageRefs 和 CGRects,而且它不能很好地映射到 NSUndoManager。

    注意:从技术上讲,您可以在每次修改图像时保存整个图像的副本。但是,这是对内存的不好使用 - 因为您可能只更改一小部分区域。如果您想拥有丰富的撤消历史记录(10 多个步骤),那么在绘图空间中保存和恢复小型子图像绝对值得您花时间。

    希望对您有所帮助!我知道这不是一个很好的解决方案——你真的不能用内置的 API 做很多事情。如果你为这个问题创建一个通用的解决方案,我想很多人都会对它感兴趣!

    【讨论】:

    • 首先,如果你一直在处理这些事情,那么你能帮我解决这个问题吗:stackoverflow.com/questions/1943325/…,而且,我想做的就是保存我的形象将 m CGContext 绘制到
    • @Ben:我一直在制作绘图应用程序,撤消/重做功能让我发疯。正如您所写:“您可以在每次修改时保存整个图像的副本.. “您能告诉我如何以及在哪里存储这些图像吗?我可以想到两个选项来临时保存图像:1)使用缓冲区 2)SqlLite 数据库。我不知道如何使用缓冲区保存图像,我将尝试第二个选项。如果你能指导我如何保存文件,我将感谢你的帮助..
    • 嗨@Ben:我正在处理一个绘图项目,我的橡皮擦有问题,你能看看这个链接并给我一些建议stackoverflow.com/questions/11502320/…
    • 难怪我不能让它与 NSUndoManager 一起工作。猜测将单个图像保存在 tmp 文件夹 undo1.png、undo2.png.. 等中。谢谢
    猜你喜欢
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 2019-11-24
    • 1970-01-01
    相关资源
    最近更新 更多