Pregunta

Si tengo una subclase UIView (o UIView ) que está visible, ¿cómo puedo saber si actualmente se muestra en la pantalla (a diferencia de, por ejemplo, , al estar en una sección de una vista de desplazamiento que actualmente está fuera de la pantalla)?

Para darte 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.

¿Fue útil?

Solución

Todavía no he probado nada de esto. Pero CGRectIntersectsRect () , - [UIView convertRect: to (from) View] y - [UIScrollView contentOffset] parecen ser tus bloques de construcción básicos aquí.

Otros consejos

Esto es lo que usé para verificar qué UIViews se veían en 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
        }
    }
}

Hace poco tuve que comprobar 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 si tiene una vista de supervisión, 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
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top