Недавно я задумался о том, что в приложении для iOS есть только один UIWindow
. Создать еще один UIWindow
и разместить его на экране не проблема.
Мой вопрос расплывчатый, но меня интересуют:
- Чего я потенциально могу достичь с помощью секунды,
UIWindow
чего нельзя сделать другими способами? - Что может пойти не так при использовании нескольких
UIWindow
экземпляров? - Я видел, что люди используют
UIWindow
вторую для отображения всплывающих окон на iPhone. Это хороший способ сделать это? Зачем? Почему нет? - Есть ли другие примеры, когда иметь еще один имеет смысл
UIWindow
?
Дело не в том, что я чего-то упускаю. Я никогда не чувствовал необходимости создавать еще один UIWindow
экземпляр, но, возможно, он позволил бы делать удивительные вещи, о которых я не знаю! :-)
Я надеюсь, что это поможет мне решить эту проблему: мне нужно добавить «обложку» ко всему, что отображается в данный момент. Он также должен работать, если уже представлены один или несколько модальных контроллеров. Если я добавлю a UIView
к представлению корневого контроллера, модальные контроллеры будут располагаться сверху, так же как и контроллеры всплывающих окон. Если я представляю вид обложки модально и уже есть модальный контроллер, закрывается только часть экрана.
источник
Ответы:
A
UIWindow
может плавать над другими элементами пользовательского интерфейса, такими как системная клавиатура.Чтобы обратиться к вашему последнему абзацу: сделайте
UIWindow
то же самое, что и ваше главное окно. Установите егоwindowLevel
свойство наUIWindowLevelStatusBar
. Установите егоhidden
свойство наNO
.источник
Начиная с ответа Роба, я немного поигрался и хотел бы написать несколько заметок для других, пытающихся получить информацию по этой теме:
UIWindow
. Просто создайте один иmakeKeyAndVisible
. Выполнено.UIWindow
охватывает все, даже модальные окна, всплывающие окна и т. д. Великолепно!UIWindow
всегда неявно портретный. Он не вращается. Вам нужно будет добавить контроллер в качестве корневого контроллера нового окна и позволить ему вращаться. (Как и в главном окне)UIWindowLevelStatusBar
он охватил все. Установите егоhidden
свойство в NO.UIWindow
можно использовать для вывода на экран представлений, плавающих поверх всего. Без создания фиктивного контроллера, просто чтобы встроить его в файлUIPopoverController
.источник
Вот документация Apple для лучшего понимания UIWindow: https://developer.apple.com/library/archive/documentation/WindowsViews/Conceptual/WindowAndScreenGuide/WindowScreenRolesinApp/WindowScreenRolesinApp.html
Одна хорошая, хотя и конкретная причина для использования нескольких экземпляров UIWindow - это когда вам нужно записать видео с экрана приложения. Возможно, вы не захотите включать определенные элементы (кнопку записи, статус записи и т. Д.) В окончательное записанное видео, поэтому вы можете поместить эти элементы в отдельный UIWindow сверху.
Фактически, если вы используете ReplayKit, вам придется использовать отдельный UIWindow для этих исключенных элементов пользовательского интерфейса. Подробнее здесь: https://medium.com/ar-tips-and-tricks/how-to-record-a-screen-capture-with-replaykit-whilst-hiding-the-hud-element-bedcca8e31e
источник