在我的应用程序中,我有一个UIViewController,里面有一个子类UIView(以及其他几个元素)。在UIView里面,名为DrawView,在我的drawRect:
方法中,我绘制了一个表格类型的东西,并在网格上绘制了一个CGPoints数组。当用户点击屏幕时,它会调用touchesBegan:withEvent:
并检查以找到触摸网格上的最近点,向drawRect:
方法绘制点的数组添加一个点,然后调用{ {1}}。当用户在屏幕上移动他们的手指时,它会检查该点是否从最后一个位置更改,并更新该点并根据需要调用[self setNeedsDisplay]
。
这在模拟器中很有用。然而,当在真正的iPhone上运行时,它运行得非常慢,当你移动手指时,它会在绘制点时滞后。我已经读过,运行计算将点放在不同的线程中可以提高性能。有没有人有这方面的经验知道这个事实?还有其他减少滞后的建议吗?
答案 0 :(得分:4)
还有其他减少滞后的建议吗?
是。不要使用-drawRect:
。这是一个漫长而复杂的原因,但基本上当UIKit发现您在-drawRect:
子类中实现了UIView
时,渲染会经历基于软件的非常慢的渲染路径。使用CALayer
对象和复合视图进行绘制时,可以获得硬件加速图形,这可以使您的应用更加高效。