Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa touch 如何快速确定与矩形相交的所有子视图(UIView)?_Cocoa Touch_Uiview_Subview_Intersection_Cgrect - Fatal编程技术网

Cocoa touch 如何快速确定与矩形相交的所有子视图(UIView)?

Cocoa touch 如何快速确定与矩形相交的所有子视图(UIView)?,cocoa-touch,uiview,subview,intersection,cgrect,Cocoa Touch,Uiview,Subview,Intersection,Cgrect,我有一个包含一堆子视图的视图。如果用户在某些子视图周围点击并拖动一个选择矩形,除了遍历主父视图的所有子视图外,是否有更快的方法来确定哪些子视图与选择矩形相交 我的解决方案是迭代每个子视图,并使用CGRectIntersectsRect(selectionRect,aSubview.frame),但这对我来说太慢了。简短的答案是否定的。长的答案是,这主要是因为frame是一个计算属性,是边界的函数,居中和变换。即使是简单的命中测试也是基于迭代的 真正的问题是为什么你认为它太慢了。如果您有数百个视图

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


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

简短的答案是否定的。长的答案是,这主要是因为
frame
是一个计算属性,是
边界的函数,
居中
变换
。即使是简单的命中测试也是基于迭代的

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


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

是的,我可能会在将子视图添加到主视图时实现某种缓存选项。我想如果我将它们以某种方式存储在NSDictionary/NSSet中进行查找,我可以让它工作得更快一些。谢谢你提供的额外信息。