Frage

Wenn ich eine UIView (oder UIView Unterklasse), die sichtbar ist, wie kann ich feststellen, ob es zur Zeit auf dem Bildschirm angezeigt wird (im Gegensatz zu zum Beispiel in einem Abschnitt einer Scroll-Ansicht bin, die derzeit für off- Bildschirm)?

Um vielleicht haben Sie eine bessere Vorstellung von dem, was ich meine, hat UITableView ein paar Methoden für die Menge der aktuell sichtbaren Zellen zu bestimmen. Ich interessiere mich für einige Code, der eine ähnliche Bestimmung für jede gegebene UIView machen kann.

War es hilfreich?

Lösung

versucht, noch nicht irgendetwas davon. Aber CGRectIntersectsRect(), -[UIView convertRect:to(from)View] und -[UIScrollView contentOffset] scheinen Ihre grundlegenden Bausteine, hier zu sein.

Andere Tipps

Hier ist, was ich verwenden, um zu überprüfen, welche UIViews in einem UIScrollView sichtbar waren:

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
        }
    }
}

Ich musste vor kurzem prüfen, ob meine Ansicht Bildschirm war. Dieser arbeitete für mich:

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
}

Wenn Sie in erster Linie Sorgen um ein Objekt freisetzt, die nicht in der Ansichtshierarchie ist, könnten Sie testen, um zu sehen, ob es einen Superview hat, wie 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
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top