Recientemente, me he estado preguntando sobre el hecho de que una aplicación de iOS solo tiene una UIWindow
. No parece ser un problema crear otro UIWindow
y colocarlo en pantalla.
Mi pregunta es un poco vaga, pero me interesa:
- ¿Qué podría lograr potencialmente con un segundo
UIWindow
que no se pueda hacer de otra manera? - ¿Qué puede salir mal al utilizar varias
UIWindow
instancias? - He visto que la gente usa un segundo
UIWindow
para mostrar vistas tipo popover en iPhone. ¿Es esta una buena forma de hacerlo? ¿Por qué? Por qué no? - ¿Hay otros ejemplos en los que tenga mucho sentido tener otro
UIWindow
?
No es que me esté perdiendo algo. Nunca sentí la necesidad de crear otra UIWindow
instancia, ¡pero tal vez permitiría hacer cosas increíbles de las que no soy consciente! :-)
Espero que pueda ayudarme a resolver este problema: necesito agregar una "vista de portada" sobre lo que se muestra actualmente. También debería funcionar si ya se han presentado uno o más controladores modales. Si agrego un UIView
a la vista del controlador raíz, los controladores modales se ubican en la parte superior, al igual que los controladores popover. Si presento la vista de portada de manera modal y ya hay un controlador modal, solo se cubre parte de la pantalla.
fuente
Respuestas:
A
UIWindow
puede flotar por encima de otros elementos de la interfaz de usuario como el teclado del sistema.Para abordar su último párrafo: Haga un
UIWindow
con el mismo marco que su ventana principal. Establezca suwindowLevel
propiedad enUIWindowLevelStatusBar
. Establezca suhidden
propiedad enNO
.fuente
Comenzando con la respuesta de Rob, jugué un poco y me gustaría escribir algunas notas para otros tratando de obtener información sobre este tema:
UIWindow
. Solo crea uno ymakeKeyAndVisible
. Hecho.UIWindow
cubre todo, incluso modales, popovers, etc. ¡Brillante!UIWindow
es siempre retrato implícitamente. No gira. Tendrá que agregar un controlador como controlador raíz de la nueva ventana y dejar que maneje la rotación. (Como la ventana principal)UIWindowLevelStatusBar
que cubra todo. Establezca suhidden
propiedad en NO.UIWindow
puede usar un segundo para traer vistas en la pantalla que flotan encima de todo. Sin crear un controlador ficticio solo para incrustarlo en unUIPopoverController
.fuente
Aquí está la documentación de Apple para comprender mejor UIWindow: https://developer.apple.com/library/archive/documentation/WindowsViews/Conceptual/WindowAndScreenGuide/WindowScreenRolesinApp/WindowScreenRolesinApp.html
Una buena razón, aunque específica, para usar varias instancias de UIWindow es cuando necesita grabar en video la pantalla de la aplicación. Es posible que no desee incluir ciertos elementos (botón de grabación, estado de grabación, etc.) en el video grabado final, por lo que puede colocar esos elementos en una UIWindow separada en la parte superior.
De hecho, si está usando ReplayKit, tendrá que usar una UIWindow separada para estos elementos de UI excluidos. Más información aquí: https://medium.com/ar-tips-and-tricks/how-to-record-a-screen-capture-with-replaykit-whilst-hiding-the-hud-element-bedcca8e31e
fuente