我有一个应用程序,它使用 cgcontext 将事物绘制到用户使用触摸事件绘制的 UIImageView 上,并且我希望能够撤消用户绘制的绘图。
编辑:
我正在尝试使用我的 touchesBegan 在触摸开始时将 UIImage 保存到NSUndoManager
然后我如何使用它来撤消使用 UIAlertView。
意思是,我想从我的 UIAlertView 调用一个方法,该方法撤消然后另一个将重做,但我不知道如何实现这一点。
请帮忙
我有一个应用程序,它使用 cgcontext 将事物绘制到用户使用触摸事件绘制的 UIImageView 上,并且我希望能够撤消用户绘制的绘图。
编辑:
我正在尝试使用我的 touchesBegan 在触摸开始时将 UIImage 保存到NSUndoManager
然后我如何使用它来撤消使用 UIAlertView。
意思是,我想从我的 UIAlertView 调用一个方法,该方法撤消然后另一个将重做,但我不知道如何实现这一点。
请帮忙
我为 iPhone ( http://www.layersforiphone.com/ )编写了图形软件,我花了一段时间试图弄清楚这一点。问题是,CGContext 本质上不是“可撤销的”。您不能取消填充矩形或恢复已绘制的部分。只是数据不存在。根据我的经验,最好的办法是创建一个“保存”方法,该方法查看正在更改的区域并将该区域中的图像数据保存到撤消堆栈中,然后再执行绘制操作。然后,当您决定撤消时,您可以获取修改后的区域并从您保存的数据中恢复它。
我选择在 Layers 中独立于 NSUndoManager 实现该方法,因为您基本上需要一堆 CGImageRefs 和 CGRects,而且它不能很好地映射到 NSUndoManager。
注意:从技术上讲,您可以在每次修改时保存整个图像的副本。但是,这是对内存的不好使用 - 因为您可能只更改一小部分区域。如果您想拥有丰富的撤消历史记录(10 多个步骤),那么在绘图空间内保存和恢复小型子图像绝对值得您花时间。
希望有帮助!我知道这不是一个很好的解决方案——你真的不能用内置的 API 做很多事情。如果你为这个问题创建一个通用的解决方案,我想很多人都会对它感兴趣!