Преимущества, проблемы, примеры добавления еще одного UIWindow в приложение для iOS?
Недавно я задумался о том, что приложение для iOS имеет только один UIWindow
, Кажется, не проблема создать другой UIWindow
и поместите его на экран.
Мой вопрос немного расплывчат, но меня интересует:
- Чего я мог бы достичь за секунду
UIWindow
что нельзя сделать другими способами? - Что может пойти не так при использовании нескольких
UIWindow
случаи? - Я видел, что люди используют 2-й
UIWindow
для отображения поповера, как взгляды на iPhone. Это хороший способ сделать это? Зачем? Почему бы и нет? - Есть ли другие примеры, когда совершенно логично иметь другой
UIWindow
?
Не то чтобы я что-то упустил. Я никогда не чувствовал необходимости создавать другой UIWindow
Например, возможно, это позволит делать удивительные вещи, о которых я не знаю!:-)
Я надеюсь, что это может помочь мне решить эту проблему: мне нужно добавить "вид обложки" поверх того, что отображается в данный момент. Он также должен работать, если уже представлен один или несколько модальных контроллеров. Если я добавлю UIView
с точки зрения корневого контроллера, модальные контроллеры располагаются сверху, как и контроллеры popover. Если я представляю вид обложки модально, и там уже есть модальный контроллер, покрыта только часть экрана.
2 ответа
UIWindow
может плавать над другими элементами пользовательского интерфейса, такими как системная клавиатура.
Чтобы обратиться к вашему последнему абзацу: UIWindow
с той же рамкой, что и ваше главное окно. Установите его windowLevel
собственность на UIWindowLevelStatusBar
, Установите его hidden
собственность на NO
,
Начиная с ответа Роба, я немного поигрался и хотел бы написать некоторые заметки для других, пытающихся получить информацию по этой теме:
- Это не проблема, чтобы добавить еще
UIWindow
, Просто создайте один иmakeKeyAndVisible
, Готово. - Удалите его, сделав другое окно видимым, затем отпустите то, что вам больше не нужно.
- Окно, которое является "ключом", получает весь ввод с клавиатуры.
UIWindow
охватывает все, даже модальные, popovers и т. д. Гениально!UIWindow
всегда портрет неявно. Это не вращается. Вы должны будете добавить контроллер в качестве корневого контроллера нового окна и позволить этому обрабатывать вращение. (Так же, как в главном окне)- Уровень окна определяет, насколько "высоко" оно отображается. Установите это
UIWindowLevelStatusBar
чтобы все это покрывало. Установите егоhidden
собственности на нет. - 2-й
UIWindow
может использоваться для отображения видов на экране, которые плавают поверх всего. Без создания фиктивного контроллера, просто чтобы вставить это вUIPopoverController
, - Это может быть особенно полезно на iPhone, где нет контроллера поповера, но вы можете имитировать что-то подобное.
- И да, это, конечно, решило мою проблему: если приложение откажется от активации, добавьте окно обложки поверх того, что в данный момент отображается, чтобы не дать iOS сделать снимок текущего содержимого вашего приложения.
Вот документация 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