繁体   English   中英

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

[英]Most efficient way for partially drawing an UIView in drawRect:

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

您将希望绘制甚至部分位于无效rect中的任何rect,因此您将要使用CGRectIntersectsRect() 话虽如此,我很少看到部分绘制UIViews有意义的情况-除​​非您在滚动视图中有一个非常大的单个视图,否则您也可以绘制整个内容。

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

在Wikipedia上查看“空间分区”主题: http : //en.wikipedia.org/wiki/Space_partitioning

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM