Ostatnio zastanawiałem się, czy aplikacja na iOS ma tylko jedną UIWindow
. Wydaje się, że utworzenie innego UIWindow
i umieszczenie go na ekranie nie stanowi problemu .
Moje pytanie jest niejasne, ale interesuje mnie:
- Co potencjalnie mógłbym osiągnąć przez sekundę
UIWindow
, czego nie można zrobić w inny sposób? - Co może się nie udać podczas korzystania z wielu
UIWindow
instancji? - Widziałem, że ludzie używają drugiego,
UIWindow
aby wyświetlać popover jak widoki na iPhonie. Czy to dobry sposób na zrobienie tego? Czemu? Dlaczego nie? - Czy są inne przykłady, w których posiadanie innego ma sens
UIWindow
?
Nie chodzi o to, że czegoś mi brakuje. Nigdy nie czułem potrzeby tworzenia kolejnej UIWindow
instancji, ale może pozwoliłoby to na zrobienie niesamowitych rzeczy, których nie jestem świadomy! :-)
Mam nadzieję, że pomoże mi to rozwiązać ten problem: muszę dodać „widok okładki” nad tym, co jest aktualnie wyświetlane. Powinien również działać, jeśli jest już przedstawiony jeden lub więcej kontrolerów modalnych. Jeśli dodam a UIView
do widoku kontrolera głównego, kontrolery modalne znajdują się na górze, podobnie jak kontrolery popover. Jeśli przedstawię widok okładki modalnie i jest już kontroler modalny, zasłonięta jest tylko część ekranu.
źródło
Odpowiedzi:
A
UIWindow
może unosić się nad innymi elementami interfejsu użytkownika, takimi jak klawiatura systemowa.Aby odnieść się do ostatniego akapitu: utwórz
UIWindow
ramkę z taką samą ramką, jak w oknie głównym. Ustaw jegowindowLevel
właściwość naUIWindowLevelStatusBar
. Ustaw jegohidden
właściwość naNO
.źródło
Zaczynając od odpowiedzi Roba, trochę się pobawiłem i chciałbym zapisać kilka uwag dla innych, próbujących uzyskać informacje na ten temat:
UIWindow
. Po prostu utwórz imakeKeyAndVisible
. Gotowe.UIWindow
obejmuje wszystko, nawet modale, popover itp. Genialnie!UIWindow
jest zawsze ukrytym portretem. Nie obraca się. Będziesz musiał dodać kontroler jako główny kontroler nowego okna i pozwolić mu na obrót. (Podobnie jak w oknie głównym)UIWindowLevelStatusBar
aby obejmował wszystko. Ustaw jegohidden
właściwość na NIE.UIWindow
można użyć, aby wyświetlić widoki na ekranie, które unoszą się nad wszystkim. Bez tworzenia fałszywego kontrolera tylko po to, aby osadzić go w plikuUIPopoverController
.źródło
Oto Dokumentacja firmy Apple dla lepszego zrozumienia UIWindow: https://developer.apple.com/library/archive/documentation/WindowsViews/Conceptual/WindowAndScreenGuide/WindowScreenRolesinApp/WindowScreenRolesinApp.html
Jednym dobrym, choć konkretnym powodem korzystania z wielu wystąpień UIWindow jest nagranie wideo ekranu aplikacji. Możesz nie chcieć uwzględniać pewnych elementów (przycisk nagrywania, stan nagrywania itp.) W końcowym nagranym wideo, więc możesz umieścić te elementy w osobnym oknie UIWindow na górze.
W rzeczywistości, jeśli używasz ReplayKit, będziesz musiał użyć osobnego okna UIWindow dla tych wykluczonych elementów UI. Więcej informacji tutaj: https://medium.com/ar-tips-and-tricks/how-to-record-a-screen-capture-with-replaykit-whilst-hiding-the-hud-element-bedcca8e31e
źródło