Ответ
Да, создание собственных экземпляров UIWindow поддерживается. Это используется для кастомных оверлейных окон (например, для алертов, Picture-in-Picture или отдельного интерфейсного слоя).
Базовый пример создания:
// 1. Создание окна
let customWindow = UIWindow(frame: UIScreen.main.bounds)
// 2. Назначение корневого контроллера
customWindow.rootViewController = MyCustomViewController()
// 3. Установка уровня окна (z-позиция)
customWindow.windowLevel = .alert + 1 // Выше системных алертов
// 4. Активация окна
customWindow.makeKeyAndVisible()
// 5. Важно: сохраните сильную ссылку на окно!
self.customWindowHolder = customWindow
Ключевые аспекты:
- Уровень окна (
windowLevel): Определяет порядок наложения окон. Используйте.statusBar,.alert,.normalили кастомные значения. - Управление жизненным циклом: Объект
UIWindowдолжен быть сохранен в сильном свойстве, иначе он будет немедленно деаллоцирован после выхода из области видимости. - Сокрытие окна: Для скрытия используйте
customWindow.isHidden = true. Не вызывайтеremoveFromSuperview, так как окно не является view. - Основное окно: Система автоматически создает
keyWindowпри запуске приложения. Кастомные окна обычно являются дополнительными.