0

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

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

4

1 回答 1

1

最简洁的答案是不。长答案是,这主要是因为frame是一个计算属性,一个boundscenter的函数transform。即使是简单的命中测试也是基于迭代的。

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

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

于 2012-03-27T05:09:59.227 回答