Цель-C: проверить, касается ли представление другого вида - PullRequest
7 голосов
/ 18 декабря 2011

Я анимирую множество просмотров, используя (..) [UIView commitAnimations]. Теперь я хочу проверить, касается ли вид, который был «снят», другому виду. Кто-нибудь знает, как это реализовать? Может быть if(view.frame.origin.x==anotherview.frame.origin.x){ } ..

Ответы [ 2 ]

23 голосов
/ 18 декабря 2011

Концептуально представление «касается» другого представления, если их ограничивающие стороны пересекаются.Таким образом, чтобы сравнить ограничивающие фрагменты двух представлений, вы должны сделать что-то вроде:

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);

Оттуда вы сможете понять, какитеративно просматривайте список представлений, которые вам нужны, чтобы определить, не перекрываются ли они.

4 голосов
/ 06 октября 2013

В качестве альтернативы вы можете просто сравнить кадры, если они находятся в одном суперпредставлении:

BOOL methodB = CGRectIntersectsRect(viewA.frame, viewB.frame);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...