gpt4 book ai didi

iphone - 如何将 NSUndoManager 与 UIImageView 或 CGContext 一起使用

转载 作者:行者123 更新时间:2023-12-03 19:16:58 24 4
gpt4 key购买 nike

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

编辑:

<小时/>

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

<小时/>

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

最佳答案

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

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

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

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

关于iphone - 如何将 NSUndoManager 与 UIImageView 或 CGContext 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1907715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com