0

我在一个单一的视图应用程序中,我已经设置了碰撞行为。我有两个不同的数组或 UIView 组。我希望同一组的成员相互碰撞,但不同组的成员相互通过。我怎样才能做到这一点?

碰撞

4

1 回答 1

0

如果您只是有两个要检查冲突的视图数组,这应该只是测试两组之间的所有对的问题(或者您是否打算找到一种优化的方法?):

let collidingViews = group1.filter{ (view) in group2.contains{ $0.frame.intersects(view.frame) }} 

如果您需要检查属于层次结构一部分的特定视图的冲突,您可以使用 UIView 标记作为您的组标识符并扩展 UIView 以识别冲突:

extension UIView
{
    func collidesWith(_ other: UIView)
    {
       return other !== self 
           && tag == other.tag
           && frame.intersects(other.frame)
    }

    var collidingViews:[UIView]
    { return superview.subviews.filter{self.collidesWith($0)} }
}

然后,您可以使用此功能检查一个视图(例如正在移动的视图)与其他视图之间的冲突:

 for collidingView in view.collindingViews
 {
    // ... do something with the collindingView
 }
于 2017-03-11T15:33:42.053 回答