Objective c 目标C:检查视图是否与其他视图接触

Objective c 目标C:检查视图是否与其他视图接触,objective-c,ios,user-interface,view,Objective C,Ios,User Interface,View,我使用(…[UIView commitAnimations]为许多视图设置动画。 现在,我想检查该视图(即“shot”)是否接触到另一个视图。 有人知道如何实现这一点吗? 可能if(view.frame.origin.x==anotherview.frame.origin.x){ }。从概念上讲,如果一个视图的边界矩形相交,则该视图会“接触”另一个视图。因此,要比较两个视图的边界矩形,需要执行以下操作: Boolean viewsOverlap = CGRectIntersectsRect(vi

我使用
(…[UIView commitAnimations]
为许多视图设置动画。 现在,我想检查该视图(即“shot”)是否接触到另一个视图。 有人知道如何实现这一点吗? 可能
if(view.frame.origin.x==anotherview.frame.origin.x){
}

从概念上讲,如果一个视图的边界矩形相交,则该视图会“接触”另一个视图。因此,要比较两个视图的边界矩形,需要执行以下操作:

Boolean viewsOverlap = CGRectIntersectsRect(viewA.bounds, viewB.bounds);
但这一点本身不起作用,因为视图的边界矩形是在它们自己的坐标空间中指定的(这意味着两者都从
0,0
等开始),所以在比较它们之前,还需要将矩形转换为公共坐标空间:

CGRect boundsA = [viewA convertRect:viewA.bounds toView:nil];
CGRect boundsB = [viewB convertRect:viewB.bounds toView:nil];
Boolean viewsOverlap = CGRectIntersectsRect(boundsA, boundsB);

从这里,您应该能够了解如何有效地迭代您关心的视图列表,以确定是否有重叠。

或者,如果帧位于同一个superview中,您可以只比较帧:

BOOL methodB = CGRectIntersectsRect(viewA.frame, viewB.frame);