2012-05-04 15 views
19

La propiedad opaque de una UIView está configurada por defecto siempre en "SÍ". Pero la referencia de clase UIView indica esto:Propiedad UIView opaque

Se espera que una vista opaca llene sus límites con contenido completamente opaco, es decir, el contenido debe tener un valor alfa de 1.0. Si la vista es opaca y no llena sus límites o contiene contenido total o parcialmente transparente, los resultados son impredecibles.

Desde el cambio de la alpha de un punto de vista es bastante común, especialmente durante las transiciones o animaciones, a continuación, la declaración anterior implicaría que siempre debe ajustar manualmente opaque a NO si se va a cambiar la propiedad alpha también.

Pero nunca he ajustado manualmente opaque y no he tenido ningún síntoma notable. ¿Qué tan necesario es hacer esta consideración?

Respuesta

12

La respuesta es que iOS es lo suficientemente inteligente como para reconocer que si su vista es alpha es menor que 1, necesita dibujar el contenido detrás de su vista, independientemente de la propiedad opaque de su vista.

En respuesta a los comentarios: de mi experimentación limitada, no creo que la propiedad opaque de la vista tenga ningún efecto. (Creo que la documentación es incorrecta.) La propiedad opaque de la capa de vista tiene un efecto: controla si el CGContext pasado a drawRect: tiene un canal alfa. Si la propiedad opaque de la capa es SÍ, el contexto no tiene canal alfa (y se trata como si cada píxel tuviera alfa de 1.0).

Cambiar la propiedad opaque de la vista no tiene ningún efecto en la propiedad opaque de la capa. Esto es diferente de (por ejemplo) la propiedad alpha de la vista, que es solo un contenedor para la propiedad opacity de la capa.

En teoría, habiendo documentado que la propiedad opaque les permite optimizar el dibujo, Apple podría implementar esa optimización en el futuro. En la práctica, hacerlo probablemente rompería muchas aplicaciones, por lo que probablemente no hagan que ese cambio se aplique a las aplicaciones vinculadas con SDK anteriores. (Tienen la capacidad de hacer que UIKit se comporte de manera diferente según la versión con la que se vinculó la aplicación)

+3

Pero esto no responde a la pregunta ... como @andrewx dijo: Si ignoras los documentos y utilizas áreas transparentes con 'opacity = YES' todo parece estar bien. Además del hecho de que los documentos estarían equivocados, la optimización basada en el valor de la propiedad descrita en los documentos también (no publicados) parece no tener lugar en absoluto. O si lo hace, no está descrito adecuadamente por los documentos. La pregunta para mí es: ¿Debería ocuparme de la propiedad y, de ser así, por qué? ¿Actuación? ¿Podría haber una mala representación si no lo hago? Alguna experiencia a alguien? ¿Reproducible? –

+1

Estoy de acuerdo, esto aún no está resuelto para mí. si iOS es lo suficientemente inteligente como para ignorar la propiedad opaca, entonces, ¿para qué sirve esta propiedad? – johnbakers

+1

@rob mayoff Gracias por la edición. Hice algunas pruebas en esta última hora y observé exactamente lo que describes.Tengo una aplicación con una vista de desplazamiento de pantalla completa que contiene vistas de desplazamiento más pequeñas como líneas, cada una con muchas subvistas, con muchas subvistas con fondos transparentes e incluso sombras. Tuvimos algunos problemas de rendimiento con el desplazamiento, lo solucionamos al eliminar la transparencia y las sombras. Sin embargo, para mis pruebas ahora activé/desactivé la transparencia, las sombras y la propiedad opaca: en ninguna configuración, el cambio de apuntalamiento opaco tuvo algún efecto sobre la reproducción, el rendimiento o el uso de la memoria. –

1

Siempre que los contenidos de la vista en sí (no sus subvistas) no tengan alfa, está bien. Por lo tanto, si inicia UIImageViews con una imagen PNG con alfa, opaque se configurará automáticamente en NO.

Normalmente, realmente no necesita muchas vistas no opacas. Pero el alfa de la vista completa es muy diferente de todos modos.