2

我制作了一个简单的基于 iOS 视图的应用程序,它可以让你在屏幕上绘制和擦除。我正在使用 NSMutableArray 来存储已经绘制的路径。每次我将控件从标记切换到橡皮擦时,反之亦然,我将当前的 CGPath 添加到数组并创建一个新的。

并且每次在drawRect中,我都会根据它是橡皮擦的路径还是标记的路径,用适当的颜色重绘数组的路径

并绘制当前正在绘制的触摸移动。

现在我知道这根本不是一个好的解决方案,并且随着数组大小的增长会消耗大量的 RAM。我的数组将已经包含冗余路径,这些路径实际上会越过已经用相同颜色着色的点,并且会不必要地占用处理器的时间来再次执行它以及内存。

任何人都可以参考更好的算法来节省资源吗?

4

3 回答 3

5

不要只是假设你有内存问题,直到你在 Instruments 下测量你的应用程序并看到你这样做。否则,您最终可能会付出很多努力而几乎没有收益。

于 2011-12-27T06:15:49.180 回答
1

最好的方法是处理图层的图形上下文。对于绘制新路径,只需避免在绘制之前清除当前图形上下文。这样您就可以将新的绘制覆盖在当前绘制上。通过在上下文中使用 kCGBlendModeClear blendMode 进行擦除,只需清除即可。

于 2011-12-27T11:33:07.913 回答
0

RAM不会是您的问题。最近解决了这个问题,我可以告诉你,重新绘制所有路径会在一段时间后开始对处理器征税。我解决这个问题的方法是“光栅化”图像的路径,然后用最新的路径绘制图像。这似乎适用于任何数量的路径和缩放,因为图像大小并没有真正改变(屏幕大小)。

如果您需要特定的代码示例,请告诉我。

于 2011-12-27T06:28:32.050 回答