Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

Вот что я использовал, чтобы проверить, какие 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
        }
    }
}

Недавно мне пришлось проверить, отображается ли мой вид на экране.У меня это сработало:

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
}

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

if (myView.superview){
 //do something with myView because you can assume it is on the screen
}
else {
 //myView is not in the view hierarchy
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top