【问题标题】:How can I quickly determine all subviews (UIViews) that intersect with a rect?如何快速确定与矩形相交的所有子视图(UIViews)?
【发布时间】:2012-03-27 04:55:33
【问题描述】:

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

我的解决方案是遍历每个子视图并使用CGRectIntersectsRect(selectionRect, aSubview.frame),但它太慢了,我不喜欢。

【问题讨论】:

    标签: cocoa-touch uiview subview intersection cgrect


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的,当子视图被添加到主视图时,我可能会实现某种缓存选项。我想如果我以某种方式将它们存储在 NSDictionary / NSSet 中以进行查找,我可以让它更快地工作。感谢您提供额外的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多