Концептуально представление «касается» другого представления, если их ограничивающие стороны пересекаются.Таким образом, чтобы сравнить ограничивающие фрагменты двух представлений, вы должны сделать что-то вроде:
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);
Оттуда вы сможете понять, какитеративно просматривайте список представлений, которые вам нужны, чтобы определить, не перекрываются ли они.