参考:UIWindowSceneDelegate
Specifying the Scenes Your App Supports
SceneDelegate 类 实现了 UIWindowSceneDelegate,UIWindowSceneDelegate 是UIKit提供的UISceneDelegate 的子类。
UIWindowSceneDelegate概述:
提供一些 方法,可以管理scene相关的任务。管理APP的用户界面的生命周期( 当scene 连接到app, 进入前台,屏幕尺寸被用户改变时,可以得到通知)
不要手动创建这个类,而应在configuration对象中指定类名。(在plist中,或appDelegate的一个方法的返回值中)配置之后,scene的窗口可以自动配置,root view controller则从故事版中的class属性加载。
使用
在iPad中,创建多窗口时,通过UISceneSession 管理每个Window。(支持多窗:plist中除了scene配置对象,还要UIApplicationSupportsMultipleScenes值为true,该key在配置对象内部 )
配置
多数应用的plist中只有一个main scene即可。每个scene通过代理类来管理,代理类就是本文题目说的那个SceneDelegate.swift 。除了plist中的配置,appDelegate中的配置方法,用于动态改变scene配置,比如系统发出通知给应用,这个方法可以根据通知改变scene的故事版,指向通知视图。(显然,这个方法只在新创建scene时才调用 )
UIScene
表示用户界面的实例。
生命周期,独立于别的scene, 页独立于app
iOS13 +
https://developer.apple.com/documentation/uikit/app_and_environment/scenes/specifying_the_scenes_your_app_supports
用户可以创建多个UI的复制品,通过应用切换器切换。在ipad还能同屏显示多个。对于每个复制品,可用scene对象管理窗口,views 和 controllers(故事版必须提供vc,但后期也可以代码改变vc,使用代理类中的方法 )。当用户创建新的复制品,UIKit负责创建和初始化。不过要依赖于你提供的信息。
当scene生命周期改变时,uikit会回调,ios13+会回调sceneDelegate,ios12-回调appDelegate