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 UIWindowy colocarlo en pantalla.
Mi pregunta es un poco vaga, pero me interesa:
- ¿Qué podría lograr potencialmente con un segundo UIWindowque no se pueda hacer de otra manera?
- ¿Qué puede salir mal al utilizar varias UIWindowinstancias?
- He visto que la gente usa un segundo UIWindowpara 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 UIWindowinstancia, ¡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 UIViewa 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
UIWindowpuede flotar por encima de otros elementos de la interfaz de usuario como el teclado del sistema.Para abordar su último párrafo: Haga un
UIWindowcon el mismo marco que su ventana principal. Establezca suwindowLevelpropiedad enUIWindowLevelStatusBar. Establezca suhiddenpropiedad 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.UIWindowcubre todo, incluso modales, popovers, etc. ¡Brillante!UIWindowes 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)UIWindowLevelStatusBarque cubra todo. Establezca suhiddenpropiedad en NO.UIWindowpuede 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