Objective-C:检查视图是否触及另一个视图

时间:2011-12-18 16:50:15

标签: objective-c ios user-interface view

我使用(..) [UIView commitAnimations]制作了大量观看动画。 现在我想检查“拍摄”的视图是否触及另一个视图。 有谁知道如何实现这个? 也许if(view.frame.origin.x==anotherview.frame.origin.x){ } ..

2 个答案:

答案 0 :(得分:22)

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

Boolean viewsOverlap = CGRectIntersectsRect(viewA.bounds, viewB.bounds);

但仅此一点是行不通的,因为视图的边界部分是在它们自己的坐标空间中指定的(意味着它们都从0,0开始等等。)所以你还需要将rects转换为a比较它们之前的公共坐标空间:

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

从那里,你应该能够弄清楚如何有效地迭代你的视图列表 - 你关心 - 以确定是否有任何重叠。

答案 1 :(得分:4)

或者你可以比较帧,如果它们在同一个超级视图中:

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