Question

Si j'ai une sous-classe UIView (ou UIView ) visible, comment puis-je savoir s'il est actuellement affiché à l'écran (par opposition à, par exemple , étant dans une section d'une vue de défilement qui est actuellement hors écran)?

Pour vous donner peut-être une meilleure idée de ce que je veux dire, UITableView propose plusieurs méthodes pour déterminer l’ensemble des cellules actuellement visibles. Je recherche un code pouvant effectuer une détermination similaire pour un UIView donné.

Était-ce utile?

La solution

Je n'ai pas encore essayé. Mais CGRectIntersectsRect () , - [UIView convertRect: to (from) View] et - [UIScrollView contentOffset] semblent être vos blocs de construction de base. ici.

Autres conseils

Voici ce que j'avais l'habitude de vérifier quelles UIViews étaient visibles dans un 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
        }
    }
}

J'ai récemment dû vérifier si ma vue était affichée à l'écran. Cela a fonctionné pour moi:

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
}

si vous souhaitez avant tout libérer un objet qui ne se trouve pas dans la hiérarchie des vues, vous pouvez le tester pour voir s'il possède un aperçu supérieur, comme dans:

if (myView.superview){
 //do something with myView because you can assume it is on the screen
}
else {
 //myView is not in the view hierarchy
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top