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