我有一个包含一堆子视图的视图。如果用户点击并在某些子视图周围拖动选择矩形,那么除了遍历主要父级的所有子视图之外,是否有更快的方法来确定哪些子视图与选择矩形相交?
我的解决方案是迭代每个子视图并使用CGRectIntersectsRect(selectionRect, aSubview.frame)
,但这对我来说太慢了。
答案 0 :(得分:1)
简短的回答是否定的。答案很长,主要是因为frame
是计算属性,是bounds
,center
和transform
的函数。即使是简单的命中测试也是基于迭代。
真正的问题是你认为它太慢的原因。如果您有数百个视图,那么我建议缓存视图的框架,比如说,在touchesBegan:withEvent:
中保存帧计算和每次必须检查交叉点时的Objective-C消息发送(当您拖动手指时)
也许,您也可以应用一些优化技巧,例如按帧起源对视图进行排序,但这会使您的代码复杂化。