2009-05-04 22 views
16

La documentación dice que la propiedad clipsToBounds de UIView cortará el dibujo a los límites, o más precisamente que el subView no puede dibujar fuera de los límites del superView.Propiedad UIView clipsToBounds: ¿Mejora el rendimiento?

Suena bien, pero ¿qué significa eso en la práctica?

Si fijo que a , entonces mi subView automáticamente única desventaja aquellas partes que no están fuera de los límites de la superView. por lo que aumenta el rendimiento general o ¿todavía tengo que asegurarme de que no creo ninguna vista que no esté visible, es decir, dentro de un UIScrollView?

Respuesta

23

Creo que es todo lo contrario: activar el recorte perjudica el rendimiento porque tiene que configurar una máscara de recorte. Recuerdo vagamente haber leído esto en alguna parte, pero no puedo encontrarlo ahora.

+2

Creo que tienes razón. En pocas palabras, el sistema operativo tiene que hacer algo para que el clipping ocurra, por lo tanto, perjudica el rendimiento. – Kriem

+2

pero el recorte en sí no es tal que el sistema diga cualquier método que quiera dibujar fuera de los límites: "oye, hombre, no lo hagas. Ahorra tiempo, toma una taza de té. No tienes que dibujar aquí ! "? – Thanks

+0

En realidad, lo es. Detrás de escena, el sistema operativo está haciendo cosas similares a OpenGl donde tiene que decidir qué dibujar y no. La decisión requiere ciclos de CPU. – Kriem

0

El golpe de rendimiento (posible) es solo determinista si conoce la jerarquía de vista. Como se mencionó anteriormente, generalmente el renderizador usará ciclos de GPU para dibujar la vista A MENOS QUE alguna vista dentro de la jerarquía use drawRect:. Esto no afecta la aplicación OpenGL ES porque drawRect: se ha omitido en este tipo de aplicaciones.

Según mi entender, determinar y visualizar el área recortada puede tomar menos ciclos que el hecho de calcular/dibujar/mezclar toda la vista. A partir del OpenGL ES 2.0 el recorte se puede calcular en GPU.

1

El caso de uso de clipsToBounds es más para las subvistas que están parcialmente fuera de la vista principal. Por ejemplo, tengo una subvista (circular) en el borde de su UIView padre (rectangular). Si configura clipsToBounds en SÍ, solo se mostrará la mitad del círculo/subvista. Si se establece en NO, se mostrará todo el círculo. Acabo de encontrar esto, así que quería compartir.

Cuestiones relacionadas