在我们都习惯AppDelegate
中的方法之前,我们创建UIWindow
,然后为该Window
设置rootViewController
。有时,当我们需要自定义警报时,我们可以创建一个新的UIWindow
,它将在上面。
现在Xcode自动创建UIScene
,并在此场景基础上创建UIWindow
。如果有人能详细解释如何在现实生活中使用这些场景,以及在AppDelegate
中仅使用UIWindow
的主要好处是什么,我将不胜感激
因为这篇文章没有解释太多
文档
您应该阅读Apple的应用程序和环境文章,而不是UIScene
文档。
解释
正如它所说的场景:
Scene,同时管理应用程序UI的多个实例,并将资源引导到UI的适当实例。
在iOS 13之前,我们只有一个场景,所以我们唯一需要同时运行ViewController
的就是多个Window
。但现在,每个应用程序都可以同时运行多个实例每个场景都有自己的状态,它可能在前台,而其他场景则在后台或处于暂停状态,而Window
完全取决于应用程序本身。
假设我们有两个视图控制器(考虑没有场景(在设备的左侧和右侧运行,然后我们需要显示一个横幅。使用旧的窗口方法将在两个窗口上显示横幅!如果你需要选择一个,你可能会找到正确的控制器并在上面展示横幅,(我想我们所有人在熟悉UIWindow
之前都做过这种方法(
因此,苹果推出了Scene
,一个用于应用程序的每个单独实例的容器。因此,您可以分别管理每个应用程序,每个应用程序都像一个单独的应用程序。它有自己的window
s和controller
s。但所有这些都由一个对象UIApplication.shared
管理,它有一个delegate
来处理一般事件(通常来自应用程序外部(和整个应用程序生命周期。
最重要的是,场景设置了多窗口支持(目前仅在iPadOS和macOS上可用(。它对iOS上的SwiftUI设置也很有用。
SceneDelegate控制屏幕上显示的内容"以管理应用程序用户界面的一个实例中的生命周期事件",而AppDelegate则控制整个应用程序生命周期。
您还会注意到keyWindow
不再适用于iOS。iOS很可能会支持多窗口,但这只是猜测。
希望这能澄清一些事情,让你了解苹果为什么要更新实现。
本文提供了一些关于SceneDelegate的更多数据,您可能会发现这些数据很有用:https://www.donnywals.com/understanding-the-ios-13-scene-delegate/