sacar - personalizar pantalla de bloqueo iphone
¿Cómo puedo saber si un UIView está visible y en la pantalla? (4)
Si tengo una UIView
(o subclase UIView
) visible, ¿cómo puedo saber si se muestra actualmente en la pantalla (en lugar de, por ejemplo, estar en una sección de una vista de desplazamiento que actualmente no está en pantalla)?
Para quizás darle una mejor idea de lo que quiero decir, UITableView
tiene un par de métodos para determinar el conjunto de celdas visibles actualmente. Estoy buscando algún código que pueda hacer una determinación similar para cualquier UIView
dado.
Recientemente tuve que verificar si mi vista estaba en pantalla. Esto funcionó para mí:
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 está preocupado principalmente por liberar un objeto que no está en la jerarquía de vistas, puede probar para ver si tiene una supervista, como en:
if (myView.superview){
//do something with myView because you can assume it is on the screen
}
else {
//myView is not in the view hierarchy
}
Esto es lo que usé para verificar qué UIViews eran visibles en 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
}
}
}
No intenté nada de esto todavía. Pero CGRectIntersectsRect()
, -[UIView convertRect:to(from)View]
y -[UIScrollView contentOffset]
parecen ser sus componentes básicos aquí.