Kürzlich habe ich mich gefragt, dass eine iOS-App nur eine hat UIWindow
. Es scheint kein Problem zu sein, ein anderes zu erstellen UIWindow
und es auf dem Bildschirm zu platzieren.
Meine Frage ist etwas vage, aber ich interessiere mich für:
- Was könnte ich möglicherweise mit einer Sekunde erreichen
UIWindow
, die auf andere Weise nicht möglich ist? - Was kann bei Verwendung mehrerer
UIWindow
Instanzen schief gehen ? - Ich habe gesehen, dass Leute eine zweite verwenden
UIWindow
, um Popover-ähnliche Ansichten auf dem iPhone anzuzeigen. Ist das ein guter Weg, es zu tun? Warum? Warum nicht? - Gibt es andere Beispiele, bei denen es durchaus Sinn macht, ein anderes zu haben
UIWindow
?
Es ist nicht so, dass mir etwas fehlt. Ich hatte nie das Bedürfnis, eine andere UIWindow
Instanz zu erstellen, aber vielleicht würde es mir erlauben, erstaunliche Dinge zu tun, die mir nicht bewusst sind! :-)
Ich hoffe, dass es mir helfen kann, dieses Problem zu lösen: Ich muss eine "Titelansicht" über alles hinzufügen, was gerade angezeigt wird. Es sollte auch funktionieren, wenn bereits ein oder mehrere modale Controller vorhanden sind. Wenn ich UIView
der Ansicht des Root-Controllers ein hinzufüge , sitzen die modalen Controller oben, ebenso die Popover-Controller. Wenn ich die Titelansicht modal präsentiere und es bereits einen modalen Controller gibt, wird nur ein Teil des Bildschirms abgedeckt.
quelle
Antworten:
A
UIWindow
kann über anderen UI-Elementen wie der Systemtastatur schweben.So adressieren Sie Ihren letzten Absatz: Erstellen Sie einen
UIWindow
mit demselben Rahmen wie Ihr Hauptfenster. Setzen Sie seinewindowLevel
Eigenschaft aufUIWindowLevelStatusBar
. Setzen Sie seinehidden
Eigenschaft aufNO
.quelle
Beginnend mit Robs Antwort habe ich ein bisschen herumgespielt und möchte einige Notizen für andere aufschreiben, die versuchen, Informationen zu diesem Thema zu erhalten:
UIWindow
. Erstellen Sie einfach eine undmakeKeyAndVisible
. Getan.UIWindow
deckt alles ab, auch Modalitäten, Popover usw. Genial!UIWindow
ist immer implizit Porträt. Es dreht sich nicht. Sie müssen einen Controller als Root-Controller des neuen Fensters hinzufügen und diesen die Drehung überlassen. (Genau wie das Hauptfenster)UIWindowLevelStatusBar
, dass es alles abdeckt. Setzen Sie seinehidden
Eigenschaft auf NO.UIWindow
kann verwendet werden, um Ansichten auf den Bildschirm zu bringen, die über allem schweben. Ohne einen Dummy-Controller zu erstellen, nur um diesen in einen einzubettenUIPopoverController
.quelle
Hier ist Apples Dokumentation zum besseren Verständnis von UIWindow: https://developer.apple.com/library/archive/documentation/WindowsViews/Conceptual/WindowAndScreenGuide/WindowScreenRolesinApp/WindowScreenRolesinApp.html
Ein guter, wenn auch spezifischer Grund für die Verwendung mehrerer Instanzen von UIWindow ist, wenn Sie den App-Bildschirm per Video aufzeichnen müssen. Möglicherweise möchten Sie bestimmte Elemente (Aufnahmetaste, Aufnahmestatus usw.) nicht in das endgültig aufgenommene Video aufnehmen, sodass Sie diese Elemente in einem separaten UIWindow oben ablegen können.
In der Tat, wenn Sie ReplayKit verwenden, werden Sie müssen eine separate UIWindow für diese ausgeschlossenen UI - Elemente verwenden. Weitere Informationen hier: https://medium.com/ar-tips-and-tricks/how-to-record-a-screen-capture-with-replaykit-whilst-hiding-the-hud-element-bedcca8e31e
quelle