Objective c 核心图形-drawRect:调用频率不够高

Objective c 核心图形-drawRect:调用频率不够高,objective-c,ios,core-graphics,drawrect,Objective C,Ios,Core Graphics,Drawrect,在我的应用程序中,我有一个UIViewController,其中包含一个子类UIView(和几个其他元素)。在名为DrawView的UIView内部,在我的drawRect:方法中,我绘制了一个表格网格类型的东西,并在网格上绘制了一个CGPoints数组。当用户点击屏幕时,它调用触摸开始:withEvent:,并检查网格上距离触摸最近的点,将点添加到drawRect:方法从中提取点的数组中,并调用[self-setNeedsDisplay]。当用户在屏幕上移动手指时,它会检查该点是否与上次位置不

在我的应用程序中,我有一个UIViewController,其中包含一个子类UIView(和几个其他元素)。在名为DrawView的UIView内部,在我的
drawRect:
方法中,我绘制了一个表格网格类型的东西,并在网格上绘制了一个CGPoints数组。当用户点击屏幕时,它调用
触摸开始:withEvent:
,并检查网格上距离触摸最近的点,将点添加到
drawRect:
方法从中提取点的数组中,并调用
[self-setNeedsDisplay]
。当用户在屏幕上移动手指时,它会检查该点是否与上次位置不同,并根据需要更新该点并调用
[self-setNeedsDisplay]

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

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


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

回答得很好。但是你会怎么做呢?用户不同的视图,每个视图有一个层,或者一个视图有多个子层?@Sandro也可以,但我可能会使用
UIView
对象而不是
CALayers
,因为这样就可以附加手势识别器,处理ObjC类型而不是CF类型(UIImage vs cgimagerf,等等)…谢谢。我是个新手,我完全不知道什么是CALayer对象或复合视图。我发现了,但是您是否建议学习其他教程或文档,以及如何使用它们进行绘制?@josherick所说的“复合视图”,我的意思是“将视图添加为其他视图的子视图”。您将它们组合在一起,即将它们层叠在一起。(“composite”被用作动词,而不是形容词)等等,真的吗?从UIView中绘制网格似乎需要大量内存。我该如何画连接点的线?甚至是一个圆(点)?