Как мне узнать, виден ли UIView на экране? - PullRequest
11 голосов
/ 27 сентября 2008

Если у меня есть видимый подкласс UIView (или UIView), как я могу определить, отображается ли он в данный момент на экране (в отличие, например, от того, находится ли он в виде прокрутки, в данный момент находится вне экрана)?

Чтобы дать вам лучшее представление о том, что я имею в виду, UITableView имеет несколько методов для определения набора видимых в данный момент ячеек. Я ищу код, который может сделать аналогичное определение для любого данного UIView.

Ответы [ 4 ]

10 голосов
/ 28 сентября 2008

Еще не пробовал ничего из этого. Но CGRectIntersectsRect(), -[UIView convertRect:to(from)View] и -[UIScrollView contentOffset] кажутся вашими основными строительными блоками здесь.

2 голосов
/ 26 мая 2013

Вот что я использовал, чтобы проверить, какие UIViews были видны в UIScrollView:

for(UIView* view in scrollView.subviews) {
    if([view isKindOfClass:[SomeView class]]) {

        // the parent of view of scrollView (which basically matches the application frame)
        CGRect f = self.view.frame; 
        // adjust our frame to match the scroll view's content offset
        f.origin.y = _scrollView.contentOffset.y;

        CGRect r = [self.view convertRect:view.frame toView:self.view];

        if(CGRectIntersectsRect(f, r)) {
            // view is visible
        }
    }
}
1 голос
/ 08 января 2013

, если вы в первую очередь беспокоитесь о выпуске объекта, которого нет в иерархии представлений, вы можете проверить, есть ли у него суперпредставление, как в:

if (myView.superview){
 //do something with myView because you can assume it is on the screen
}
else {
 //myView is not in the view hierarchy
}
1 голос
/ 08 августа 2012

Мне недавно пришлось проверить, был ли мой вид на экране. Это сработало для меня:

CGRect viewFrame = self.view.frame;
CGRect appFrame = [[UIScreen mainScreen] applicationFrame];

// We may have received messages while this tableview is offscreen
if (CGRectIntersectsRect(viewFrame, appFrame)) {
    // Do work here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...