Swift Xcode组成员之间的冲突,但不是组

时间:2017-03-11 14:00:18

标签: swift xcode uicollisionbehavior

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

collisions

1 个答案:

答案 0 :(得分:0)

如果您只想要检查两个视图的两个视图数组,这应该只是测试两个组之间的所有对(或者您是否想要找到一种优化的方法来执行此操作?):< / p>

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
 }