Recentemente, tenho me perguntado sobre o fato de um aplicativo iOS ter apenas um UIWindow
. Não parece ser um problema criar outro UIWindow
e colocá-lo na tela.
Minha pergunta é meio vaga, mas estou interessado em:
- O que eu poderia potencialmente alcançar com um segundo
UIWindow
que não pode ser feito de outras maneiras? - O que pode dar errado ao usar várias
UIWindow
instâncias? - Eu vi que as pessoas usam um segundo
UIWindow
para exibir popover como visualizações no iPhone. Esta é uma boa maneira de fazer isso? Por quê? Por que não? - Existem outros exemplos em que faz todo o sentido ter outro
UIWindow
?
Não é que esteja faltando alguma coisa. Nunca senti a necessidade de criar outra UIWindow
instância, mas talvez isso permitisse fazer coisas incríveis das quais não tenho conhecimento! :-)
Espero que isso possa me ajudar a resolver este problema: preciso adicionar uma "visualização da capa" sobre o que está sendo exibido no momento. Também deve funcionar se já houver um ou mais controladores modais apresentados. Se eu adicionar a UIView
à visualização do controlador raiz, os controladores modais ficam no topo, assim como os controladores popover. Se eu apresentar a visualização da capa modalmente e já houver um controlador modal, apenas parte da tela será coberta.
fonte
Respostas:
A
UIWindow
pode flutuar acima de outros elementos da IU, como o teclado do sistema.Para tratar do seu último parágrafo: Faça um
UIWindow
com a mesma moldura da janela principal. Defina suawindowLevel
propriedade comoUIWindowLevelStatusBar
. Defina suahidden
propriedade comoNO
.fonte
Começando com a resposta de Rob, brinquei um pouco e gostaria de escrever algumas notas para outros que tentam obter informações sobre este tópico:
UIWindow
. Basta criar um emakeKeyAndVisible
. Feito.UIWindow
cobre tudo, até modais, popovers, etc. Brilhante!UIWindow
é sempre retrato implicitamente. Não gira. Você terá que adicionar um controlador como o controlador raiz da nova janela e deixar que a rotação do manipulador. (Assim como a janela principal)UIWindowLevelStatusBar
que cubra tudo. Defina suahidden
propriedade como NÃO.UIWindow
pode ser usado para trazer visualizações na tela que flutuam em cima de tudo. Sem criar um controlador fictício apenas para incorporá-lo a umUIPopoverController
.fonte
Aqui está a documentação da Apple para entender melhor a UIWindow: https://developer.apple.com/library/archive/documentation/WindowsViews/Conceptual/WindowAndScreenGuide/WindowScreenRolesinApp/WindowScreenRolesinApp.html
Um bom motivo, embora específico, para usar várias instâncias de UIWindow é quando você precisa gravar a tela do aplicativo em vídeo. Você pode não querer incluir certos elementos (botão de gravação, status de gravação, etc.) no vídeo final gravado, então você pode colocar esses elementos em uma UIWindow separada no topo.
Na verdade, se você estiver usando o ReplayKit, terá que usar uma UIWindow separada para esses elementos de UI excluídos. Mais informações aqui: https://medium.com/ar-tips-and-tricks/how-to-record-a-screen-capture-with-replaykit-whilst-hiding-the-hud-element-bedcca8e31e
fonte