Swift Xcode 组成员之间的碰撞,但不是组

Swift Xcode Collisions between group members, but not groups

我在单视图应用程序中,并且设置了碰撞行为。我有两个不同的数组或 UIView 组。我希望同一组的成员相互碰撞,但不同组的成员相互通过。我该怎么做?

collisions

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

let collidingViews = group1.filter{ (view) in group2.contains{ [=10=].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([=11=])} }
}

然后您可以使用此功能检查一个视图(例如被移动的视图)与其他视图之间的碰撞:

 for collidingView in view.collindingViews
 {
    // ... do something with the collindingView
 }