Domanda

Se ho una sottoclasse UIView (o UIView ) visibile, come posso sapere se è attualmente mostrato sullo schermo (al contrario, ad esempio , trovarsi in una sezione di una vista di scorrimento attualmente fuori dallo schermo)?

Per darti un'idea migliore di cosa intendo, UITableView ha un paio di metodi per determinare l'insieme di celle attualmente visibili. Sto cercando un codice in grado di determinare in modo analogo qualsiasi UIView .

È stato utile?

Soluzione

Non ho ancora provato nulla di tutto questo. Ma CGRectIntersectsRect () , - [UIView convertRect: a (da) Visualizza] e - [UIScrollView contentOffset] sembrano essere i mattoni fondamentali qui.

Altri suggerimenti

Ecco cosa ho usato per verificare quali UIVview erano visibili in 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
        }
    }
}

Di recente ho dovuto verificare se la mia vista era sullo schermo. Questo ha funzionato per me:

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
}

se sei principalmente preoccupato di rilasciare un oggetto che non è nella gerarchia della vista, potresti provare per vedere se ha una superview, come in:

if (myView.superview){
 //do something with myView because you can assume it is on the screen
}
else {
 //myView is not in the view hierarchy
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top