应用程序进入后台时如何在 iOS 13 上显示自定义启动画面?
Posted
技术标签:
【中文标题】应用程序进入后台时如何在 iOS 13 上显示自定义启动画面?【英文标题】:How to show custom splash screen on iOS 13 when app enters background? 【发布时间】:2019-10-09 09:02:00 【问题描述】:问题和这个类似:
Display a view or splash screen before applicationDidEnterBackground (to avoid active view screenshot)
上面的链接还展示了如何实现它的代码示例。
当应用程序在“多任务屏幕”上进入背景时,我需要显示例如白屏:
问题是这种方式在 ios 13 上不起作用!如何解决这个问题?
【问题讨论】:
【参考方案1】:您在 UIWindowSceneDelegate
方法中证明了这一点。实现你想要的任何逻辑。
func sceneDidEnterBackground(_ scene: UIScene)
【讨论】:
也许吧。但是该项目是从不知道UIWindowSceneDelegate
和SwiftUI
的旧Xcode 版本开始开发的。项目是否应该基于SwiftUI
才能使用?
它不一定要基于 SwiftUI
好的,如何将UIWindowSceneDelegate
添加到现有项目中?
无论如何,您都不必为 iOS 13 使用 UIWindowSceneDelegate。您的应用委托是否符合UIApplicationDelegate
我在我的自定义课程中订阅了UIApplicationDidEnterBackground
。代码与之前的 iOS 版本一样执行,但 UI 中没有任何反应。【参考方案2】:
我将这个(我自己的)实现用于您要求 iOS 12 和 iOS 13 支持的功能
AppDelegate:
private var blankWindow: BlankWindow?
// MARK: Shared AppDelegate
extension AppDelegate
static func blankWindowShouldAppear(blankWindow: inout BlankWindow?)
blankWindow = BlankWindow(frame: UIScreen.main.bounds)
blankWindow?.makeKeyAndVisible()
static func blankWindowShouldDisappear(window: UIWindow?, blankWindow: inout BlankWindow?)
window?.makeKeyAndVisible()
blankWindow = nil
@available(iOS 13.0, *)
static func blankWindowShouldAppear(_ windowScene: UIWindowScene, blankWindow: inout BlankWindow?)
blankWindow = BlankWindow(windowScene: windowScene)
blankWindow?.makeKeyAndVisible()
// MARK: Old life cycle methods
extension AppDelegate
/// ⚠️ Methods here will not be called under iOS 13 due to new SceneDelegate life cycle
func applicationWillEnterBackground(_ application: UIApplication)
AppDelegate.blankWindowShouldAppear(blankWindow: &blankWindow)
func applicationWillEnterForeground(_ application: UIApplication)
AppDelegate.blankWindowShouldDisappear(window: window, blankWindow: &blankWindow)
场景代理:
private var blankWindow: BlankWindow?
// MARK: New life cycle methods
@available(iOS 13.0, *)
extension SceneDelegate
/// ⚠️ As for now, we use fallback to AppDelegate shared methods to reduce code duplication
/// Not all of the new life cycle methods are implemented here, yet
func sceneWillEnterForeground(_ scene: UIScene)
AppDelegate.blankWindowShouldDisappear(window: window, blankWindow: &blankWindow)
func sceneWillEnterBackground(_ scene: UIScene)
guard let windowScene = (scene as? UIWindowScene) else return
AppDelegate.blankWindowShouldAppear(windowScene, blankWindow: &blankWindow)
BlankWindow 类是您此时要向用户显示的 UIWindow
【讨论】:
如果你能提供 BlankWIdow 实现会很好 @Async- BlankWindow 可以是 UIWindow 的任何子类,您可以根据需要自定义它。现在有专门的或通用的实现:)以上是关于应用程序进入后台时如何在 iOS 13 上显示自定义启动画面?的主要内容,如果未能解决你的问题,请参考以下文章