SceneDelegate官方文档学习

参考: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

`SceneDelegate` 是 iOS 13 引入的新特性,用于管理多场景(multi-scene)应用程序的生命周期和状态。每个场景都代表一个应用程序窗口和相关的视图控制器层次结构。 在使用 `SceneDelegate` 之前,我们需要先创建一个基于 `UIKit` 的应用程序模板。在 Xcode 11 中创建一个新的项目时,默认会自动生成 `SceneDelegate.swift` 文件。如果没有自动生成,可以手动创建。 然后,在 `AppDelegate.swift` 文件中,需要将应用程序的生命周期方法移动到新的 `SceneDelegate.swift` 文件中。例如,将 `application(_:didFinishLaunchingWithOptions:)` 方法移动到 `SceneDelegate.swift` 文件中: ```swift class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { // Create a new UIWindow instance guard let windowScene = (scene as? UIWindowScene) else { return } window = UIWindow(windowScene: windowScene) // Set the root view controller of the window let viewController = ViewController() window?.rootViewController = viewController // Make the window visible window?.makeKeyAndVisible() } // other SceneDelegate methods } ``` 在 `scene(_:willConnectTo:options:)` 方法中,我们需要创建一个新的 `UIWindow` 实例,并设置其根视图控制器。最后,通过调用 `makeKeyAndVisible()` 方法,使窗口可见。 最后,在 `Info.plist` 文件中,需要添加一个新的键值对,以启用多场景支持。在 `Application Scene Manifest` 中添加一个 `Session Role` 为 `UIWindowSceneSessionRoleApplication` 的项。 ```xml <key>UIApplicationSceneManifest</key> <dict> <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> <key>UISceneStoryboardFile</key> <string>Main</string> </dict> </array> </dict> </dict> ``` 现在,我们已经成功地启用了多场景支持,并将应用程序的生命周期方法移动到了 `SceneDelegate.swift` 文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值