plus - nfc iphone xr
Propiedad opaca UIView (2)
La propiedad opaque
de una UIView se establece de forma predeterminada en "SÍ". Pero la referencia de clase UIView dice esto:
Se espera que una vista opaca llene sus límites con contenido totalmente 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.
Dado que cambiar el alpha
de una vista es bastante común, especialmente durante las transiciones o animaciones, entonces la declaración anterior implicaría que siempre debe establecer opaque
manualmente en NO
si también va a cambiar la propiedad alpha
.
Pero nunca he ajustado manualmente el opaque
y no he tenido ningún síntoma notable. ¿Qué tan necesario es hacer esta consideración?
La respuesta es que iOS es lo suficientemente inteligente como para reconocer que si el alpha
su vista es menor que 1, debe dibujar el contenido detrás de su vista, independientemente de la propiedad opaque
de su vista.
En respuesta a los comentarios: de mi limitada experimentación, no creo que la propiedad opaque
la vista tenga ningún efecto. (Creo que la documentación es incorrecta.) La propiedad opaque
la capa de la vista tiene un efecto: controla si CGContext
pasó a drawRect:
tiene un canal alfa. Si la propiedad opaque
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
la vista no tiene efecto en la propiedad opaque
la capa. Esto es diferente a (por ejemplo) la propiedad alpha
la vista, que es solo una envoltura para la propiedad de opacity
la capa.
En teoría, después de haber 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 se aplique ese cambio a las aplicaciones vinculadas a SDK anteriores. (Tienen la capacidad de hacer que UIKit se comporte de manera diferente dependiendo de la versión con la que se vinculó la aplicación).
Siempre que el contenido de la vista en sí (no sus subvistas) no tenga alfa, está bien. Por lo tanto, si inicia una vista de UIImageViews con una imagen PNG con alfa, opaque
se configurará en NO
automáticamente.
Normalmente no necesitas muchas vistas no opacas. Pero alfa de la vista completa es algo diferente de todos modos.