如何快速确定与rect相交的所有子视图(UIViews)?

时间:2012-03-27 04:55:34

标签: cocoa-touch uiview subview intersection cgrect

我有一个包含一堆子视图的视图。如果用户点击并在某些子视图周围拖动选择矩形,那么除了遍历主要父级的所有子视图之外,是否有更快的方法来确定哪些子视图与选择矩形相交?

我的解决方案是迭代每个子视图并使用CGRectIntersectsRect(selectionRect, aSubview.frame),但这对我来说太慢了。

1 个答案:

答案 0 :(得分:1)

简短的回答是否定的。答案很长,主要是因为frame计算属性,是boundscentertransform的函数。即使是简单的命中测试也是基于迭代。

真正的问题是你认为它太慢的原因。如果您有数百个视图,那么我建议缓存视图的框架,比如说,在touchesBegan:withEvent:中保存帧计算和每次必须检查交叉点时的Objective-C消息发送(当您拖动手指时)

也许,您也可以应用一些优化技巧,例如按帧起源对视图进行排序,但这会使您的代码复杂化。