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

Posted

技术标签:

【中文标题】UISceneDelegate 和 UIApplicationDelegate 的“didBecomeActive”和“willResignActive”方法对之间的区别?【英文标题】:Difference between "didBecomeActive" and "willResignActive" method pairs for UISceneDelegate and UIApplicationDelegate? 【发布时间】:2019-11-11 14:48:15 【问题描述】:

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

问题是它有时无法在 ios 13 上运行。

我找到了这个article:

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

【问题讨论】:

【参考方案1】:

如果您有一个在 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 的两组方法。 UIApplicationDelegate 的方法将在您的应用在 iOS 12 或更早版本的设备上运行时调用,UISceneDelegate/UIWindowSceneDelegate 方法将在您的应用在 iOS 13 或更高版本的设备上运行时调用。

请记住,在 iOS 13 下,如果您支持多个窗口/场景,则场景委托方法与特定场景相关联。

【讨论】:

问题是应用程序很旧,UISceneDelegate 甚至不存在。那么如果 iOS 13 有必要,那么有没有关于如何迁移旧项目的指南? 我更新了答案,涵盖了不支持场景的旧应用。

以上是关于UISceneDelegate 和 UIApplicationDelegate 的“didBecomeActive”和“willResignActive”方法对之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 13 - UIApplicationDelegate 中的 applicationWillTerminate 等效于 UISceneDelegate?

iOS项目入口的演变过程(2021)

iOS项目入口的演变过程(2021)

一句话解决的事儿

一句话解决的事儿

在 AppDelegate 中为两个视图控制器使用和更新 NSMutableString