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