UIScene — это фундаментальный объект в UIKit, представляющий отдельный экземпляр пользовательского интерфейса приложения. Введен в iOS 13 как часть новой архитектуры многозадачности.
Ключевые характеристики:
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<true/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
</dict>
</array>
</dict>
</dict>
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene,
willConnectTo session: UISceneSession,
options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = scene as? UIWindowScene else { return }
window = UIWindow(windowScene: windowScene)
window?.rootViewController = MainViewController()
window?.makeKeyAndVisible()
}
}
// Отслеживание состояния сцены
@Environment(\.scenePhase) var scenePhase
switch scenePhase {
case .active: // Работает
case .inactive: // Не получает событий
case .background: // Не видна
}
// Создание новой сцены
let activity = NSUserActivity(activityType: "com.example.detail")
UIApplication.shared.requestSceneSessionActivation(nil,
userActivity: activity,
options: nil)
func stateRestorationActivity(for scene: UIScene) -> NSUserActivity? {
return userActivity // Возвращаем текущее состояние
}
guard let windowScene = scene as? UIWindowSceneuserActivity для передачи контекста между сценамиUIScene представляет современный подход к управлению интерфейсами в iOS, особенно важный для поддержки многозадачности на iPad и изолированных контекстов выполнения. Архитектура на основе сцен позволяет создавать более гибкие и мощные приложения.