18

Before we all get used to the approach when in AppDelegate we create UIWindow and then set rootViewController for this Window. Sometimes when we needed to have a custom alert we can create a new UIWindow that will be above.

Now Xcode automatically creates UIScene and creates UIWindow base on this scene. I would appreciate if somebody can explain in details how to use this scenes in real life and what is their major benefit from using just UIWindow in AppDelegate

Because this article doesn't explain much

4

2 回答 2

9

文档

您应该阅读Apple的App and Environment 文章而不是文档。UIScene


解释

正如它所说的场景

场景,同时管理应用程序 UI 的多个实例,并将资源定向到适当的 UI 实例。

在iOS 13之前我们只有一个场景,所以我们唯一需要ViewController同时运行s的就是多个Windows在彼此之上。但是现在,每个应用程序都可以同时运行多个实例!每个场景都有自己的状态,它可能在前台,而其他场景在后台或被挂起,而Window完全取决于应用程序本身。

假设我们有 2 个视图控制器(假设没有场景)在设备的左侧和右侧运行,然后我们需要显示横幅。使用旧的窗口方法将在它们两个上显示横幅!如果你需要选择一个,你最终可能会找到正确的控制器并在上面展示横幅,(我想我们所有人在熟悉之前都做过这个方法UIWindow

因此,苹果引入Scene了一个容器,用于存放应用程序的每个单独实例。因此,您可以单独管理每一个,并且它们中的每一个都像一个单独的应用程序一样。它有自己window的 s 和controllers。但所有这些都由一个对象管理,UIApplication.shared它有一个delegate处理一般事件(通常来自应用程序外部)和整个应用程序生命周期。


于 2020-05-17T06:54:56.840 回答
6

最大的一点是场景设置了多窗口支持(目前仅在 iPadOS 和 macOS 上可用)。它对于 iOS 上的 SwiftUI 设置也很有用。

SceneDelegate 控制屏幕上显示的内容“以管理应用程序用户界面的一个实例中的生命周期事件。”,而 AppDelegate 控制您的整个应用程序生命周期。

您还会注意到keyWindowiOS 不再存在。iOS 很可能会支持多窗口,但目前还只是猜测。

希望这可以澄清一些事情,并让您了解 Apple 更新实施的原因。

本文提供了更多有关 SceneDelegate 的数据,您可能会觉得这些数据有用:https ://www.donnywals.com/understanding-the-ios-13-scene-delegate/

于 2020-05-14T09:04:13.063 回答