核心图形 - drawRect:没有足够频繁地调用

时间:2011-08-09 05:10:53

标签: objective-c ios core-graphics drawrect

在我的应用程序中,我有一个UIViewController,里面有一个子类UIView(以及其他几个元素)。在UIView里面,名为DrawView,在我的drawRect:方法中,我绘制了一个表格类型的东西,并在网格上绘制了一个CGPoints数组。当用户点击屏幕时,它会调用touchesBegan:withEvent:并检查以找到触摸网格上的最近点,向drawRect:方法绘制点的数组添加一个点,然后调用{ {1}}。当用户在屏幕上移动他们的手指时,它会检查该点是否从最后一个位置更改,并更新该点并根据需要调用[self setNeedsDisplay]

这在模拟器中很有用。然而,当在真正的iPhone上运行时,它运行得非常慢,当你移动手指时,它会在绘制点时滞后。我已经读过,运行计算将点放在不同的线程中可以提高性能。有没有人有这方面的经验知道这个事实?还有其他减少滞后的建议吗?

1 个答案:

答案 0 :(得分:4)

  

还有其他减少滞后的建议吗?

是。不要使用-drawRect:。这是一个漫长而复杂的原因,但基本上当UIKit发现您在-drawRect:子类中实现了UIView时,渲染会经历基于软件的非常慢的渲染路径。使用CALayer对象和复合视图进行绘制时,可以获得硬件加速图形,这可以使您的应用更加高效。