2010-10-20 47 views
2

我尽可能在我的UIView子类中使用setNeedsDisplayInRect:,但我不知道drawRect:中要做什么。检测UIView的哪些部分必须被绘制的最好方法是什么?现在我已经将我的UIView分成了几个CGRect's。对于每个CGRect,我打电话CGRectContainsRect()检查是否需要绘制CGRect。这是正确的方式,还是有更好的方法?在drawRect中部分绘制UIView的最有效方法:

+1

听起来你想要的东西瓷砖,你看着使用CATiledLayer呢?让它为你做平铺,然后画在图层上。 – jer 2010-10-20 14:46:33

回答

2

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

退房空间分区的维基百科上的题目:http://en.wikipedia.org/wiki/Space_partitioning

3

你会想要绘制任何甚至部分在失效矩形中的矩形,所以你会想要使用CGRectIntersectsRect()。话虽如此,我已经看到少数情况下部分绘制UIViews是有意义的 - 除非在滚动视图中有一个非常大的单个视图,否则您可以绘制整个视图。

相关问题