2011-12-18 69 views

回答

20

从概念上讲,如果一个视图的边界矩形相交,则视图“触及”另一个视图。因此,要比较的两种观点包围rects,你想要做的事,如:

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

但这不会单独工作,因为意见的边界rects在自己的坐标空间指定的(意思是无论是在启动0,0,等等,等等),所以你还需要你比较之前的rects变换到一个共同的坐标空间:

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

从那里,你应该能够找出如何通过你的列表迭代效率views-you-care-about来确定是否有重叠。

+1

+1很好地解释 – Till 2011-12-18 18:09:38

4

或者你可以只比较帧,如果他们在同上海华:

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

这工作完全! – Bobby 2016-02-25 17:50:52