Wie kann ich feststellen, ob ein UIView sichtbar ist und auf dem Bildschirm?
-
02-07-2019 - |
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.
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
}