Récemment, je me suis interrogé sur le fait qu'une application iOS n'en a qu'une UIWindow
. Cela ne semble pas être un problème d'en créer un autre UIWindow
et de le placer à l'écran.
Ma question est assez vague, mais je m'intéresse à:
- Que pourrais-je potentiellement accomplir avec une seconde
UIWindow
qui ne peut pas être fait autrement? - Qu'est-ce qui peut mal se passer lors de l'utilisation de plusieurs
UIWindow
instances? - J'ai vu que les gens utilisent un 2ème
UIWindow
pour afficher des vues popover comme sur iPhone. Est-ce une bonne façon de procéder? Pourquoi? Pourquoi pas? - Y a-t-il d'autres exemples où il est parfaitement logique d'en avoir un autre
UIWindow
?
Ce n'est pas que je manque quelque chose. Je n'ai jamais ressenti le besoin de créer une autre UIWindow
instance mais peut-être que cela permettrait de faire des choses incroyables dont je ne suis pas au courant! :-)
J'espère que cela pourrait m'aider à résoudre ce problème: j'ai besoin d'ajouter une "vue de couverture" sur tout ce qui est actuellement affiché. Cela devrait également fonctionner s'il y a déjà un ou plusieurs contrôleurs modaux présentés. Si j'ajoute un UIView
à la vue du contrôleur racine, les contrôleurs modaux sont placés en haut, tout comme les contrôleurs popover. Si je présente la vue de couverture de manière modale et qu'il existe déjà un contrôleur modal, seule une partie de l'écran est couverte.
la source
Réponses:
Un
UIWindow
peut flotter au-dessus d'autres éléments de l'interface utilisateur comme le clavier système.Pour aborder votre dernier paragraphe: Faites un
UIWindow
avec le même cadre que votre fenêtre principale. Définissez sawindowLevel
propriété surUIWindowLevelStatusBar
. Définissez sahidden
propriété surNO
.la source
En commençant par la réponse de Rob, j'ai joué un peu et j'aimerais écrire quelques notes pour les autres essayant d'obtenir des informations sur ce sujet:
UIWindow
. Créez simplement un etmakeKeyAndVisible
. Terminé.UIWindow
couvre tout, même les modaux, les popovers, etc. Brillant!UIWindow
est toujours portrait implicitement. Il ne tourne pas. Vous devrez ajouter un contrôleur comme contrôleur racine de la nouvelle fenêtre et laisser celui-ci gérer la rotation. (Tout comme la fenêtre principale)UIWindowLevelStatusBar
pour qu'il couvre tout. Définissez sahidden
propriété sur NON.UIWindow
peut être utilisé pour apporter des vues sur l'écran qui flottent au-dessus de tout. Sans créer un contrôleur factice juste pour l'intégrer dans un fichierUIPopoverController
.la source
Voici la documentation Apple pour mieux comprendre UIWindow: https://developer.apple.com/library/archive/documentation/WindowsViews/Conceptual/WindowAndScreenGuide/WindowScreenRolesinApp/WindowScreenRolesinApp.html
Une bonne raison, bien que spécifique, d'utiliser plusieurs instances d'UIWindow est lorsque vous devez enregistrer l'écran de l'application en vidéo. Il se peut que vous ne souhaitiez pas inclure certains éléments (bouton d'enregistrement, statut d'enregistrement, etc.) dans la vidéo enregistrée finale, vous pouvez donc placer ces éléments dans une UIWindow distincte en haut.
En fait, si vous utilisez ReplayKit, vous devez utiliser un UIWindow séparé pour ces éléments d'interface utilisateur exclus. Plus d'informations ici: https://medium.com/ar-tips-and-tricks/how-to-record-a-screen-capture-with-replaykit-whilst-hiding-the-hud-element-bedcca8e31e
la source