UISceneDelegate 和 UIApplicationDelegate 的 "didBecomeActive" 和 "willResignActive" 方法对之间的区别?

Difference between "didBecomeActive" and "willResignActive" method pairs for UISceneDelegate and UIApplicationDelegate?

我的主要任务是在应用进入后台时将屏幕与非透明视图重叠以隐藏信息。官方的解决方案描述为here.

问题是它有时在 iOS 13.

上不起作用

我找到这个 article:

它解释了 sceneDidBecomeActive(_:)sceneWillResignActive(_:) 的工作原理。但是新项目有AppDelegate+SceneDelegate,旧项目只有AppDelegate。我可以只使用 applicationDidBecomeActive(_:)applicationWillResignActive(_:) 吗?或者我应该以某种方式迁移项目以使用 UISceneDelegate(iOS 12 和更早版本不支持)?

如果您的应用是在 Xcode 11 之前创建的,那么它不支持场景。只要您不添加任何与场景相关的内容(Apple 将来可能会禁止),那么您的应用程序的生命周期将继续在 iOS 13 下工作,就像在 iOS 12 下一样更早。只需继续使用 UIApplicationDelegate 方法即可。


如果您的应用程序支持 iOS 12 和 iOS 13,并且您正在使用 iOS 13 中的场景,那么您必须同时实现 applicationWillResignActive(在支持 iOS 12 及更早版本)和 sceneWillResignActive(支持 iOS 13 及更高版本)。

实际上,在同时支持iOS 12 和13 的应用程序中,您基本上需要实现两套UIApplicationDelegateUISceneDelegate/UIWindowSceneDelegate 方法。当您的应用程序在 iOS 12 或更早版本的设备上运行时,将调用 UIApplicationDelegate 的方法,当您的应用程序在 iOS 的设备上运行时,将调用 UISceneDelegate/UIWindowSceneDelegate 方法] 13 或更高版本。

只要记住在iOS13下,如果支持多个windows/scenes,场景委托方法与特定场景相关联。