做法:先摆出来,分割线之后再分析
1、删除
2、在SceneDelegate中
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
let newWindow = UIWindow(windowScene: windowScene)
let vc = PicturePickerController()
vc.view.backgroundColor = .cyan
newWindow.rootViewController = vc
newWindow.makeKeyAndVisible()
window = newWindow
}
3、为了验证,可以在ViewController里面打印
print("View did load default")
接下来仔细分析
这里借用某位IOS大神的代码,也是他帮助我填补了这段知识盲区,感激不尽
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// ⚠️ 因为 第一步取消了默认配置文件window 就变成了nil 这里做一个验证
//所以 需要自己赋值window 并且关联 windowScene
if (window == nil) {
print("window => nil")
}
// 系统默认代码
//guard let _ = (scene as? UIWindowScene) else { return }
//将UIWindowScene实例化
// 这里给需要用到的 win scene 改个名
guard let windowScene = (scene as? UIWindowScene) else { return }
// 实例化新的 window 视图窗口 => uiwindow 本质是个 uiview 而已
// 另外这里需要关联当前系统给到的场景 windowScene
// 至于这些什么场景 视图 啥的都是苹果为了开发程序弄出来的概念跟结构
let newWindow = UIWindow(windowScene: windowScene)
// let newWindow = UIWindow(frame: UIScreen.main.bounds) 无法显示 因为没有附着到场景 scene 里面
// 实例化新的 vc
let vc = AAViewController()
// 设置 vc 掌管的 view 的 bgColor
vc.view.backgroundColor = .cyan
// 设置新window 的 根部视图控制器
newWindow.rootViewController = vc
// 让新窗口可见
newWindow.makeKeyAndVisible()
// 赋值系统因为配置文件取消 赋值 nil 的 window 属性为新的自己实例化的启动窗口视图(!!!记住本质是 uiview)
window = newWindow
/*⚠application =>
scene 场景 =>
场景下面分属 window 视图窗口 =>
每个 window 下面掌管 vc 里面的 view, vc 的存在不过是调用业务逻辑更新里面的 view, 这个 view 又会嵌套在 window 上显示, 后面 vc 这玩意会在 SwiftUI 框架里被消灭, 因为后面都流行 mvvm 的架构
*/
}
后续学习: