在drawRect中部分绘制UIView的最有效方法:

时间:2010-10-20 14:30:52

标签: iphone objective-c cocoa-touch uiview core-graphics

我在我的UIView子类中尽可能多地使用setNeedsDisplayInRect:,但我不知道在drawRect:中该怎么做。检测UIView的哪些部分必须绘制的最佳方法是什么?现在我把我的UIView分成了几个CGRect。对于每个CGRect我正在调用CGRectContainsRect()来检查是否需要绘制CGRect。这是正确的方法,还是有更好的方法?

2 个答案:

答案 0 :(得分:3)

您需要绘制任何甚至部分位于无效矩形中的矩形,因此您需要使用CGRectIntersectsRect()。话虽如此,我发现很少有部分绘制UIViews的情况 - 除非你在滚动视图中有一个非常大的单个视图,你也可以绘制整个东西。

答案 1 :(得分:2)

您正在查看经典的空间分区任务。根据您的视图复杂程度,您可以使用不同的策略来找出需要绘制的内容。如果您的场景非常简单,那么绘制所有内容或将场景划分为离散区域并进行边界矩形检查就可以了。对于非常复杂的场景,有几个好的数据结构(如八叉树)用于将场景表示为树,并对给定区域内的对象执行空间查询。

查看维基百科上的空间分区主题:http://en.wikipedia.org/wiki/Space_partitioning