2011-12-18 72 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