gpt4 book ai didi

ios - 在状态恢复期间显示应用程序屏幕快照而不是 launchScreen

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:22:17 26 4
gpt4 key购买 nike

我遇到了这种情况,我第一次为支持 iOS 9.3 及更高版本的新应用程序添加了应用程序状态恢复 API。状态恢复在功能上运行良好,但我注意到由于状态恢复期间的延迟,它显示的是屏幕快照而不是 LaunchScreen.xib 内容。我所说的快照指的是 iOS 在您的应用程序 UI 进入后台时自动截取的屏幕截图。

如果你不知道什么是应用程序状态恢复,它是随 iOS 6 一起出现的,这是来自 Apple 的链接:

Apple Documentation on App State Saving & Restoring

在这个应用案例中显示屏幕快照是一个严重的问题,因为在应用状态恢复期间,这个特定应用在运行 iOS 9.3.5 的 iPhone 4s 上有大约 4 秒的延迟。用户会认为该应用程序已挂起,因为在此期间未显示启动/启动屏幕。这种情况在当前可用的所有 iOS 版本上重现,包括模拟器和设备。

如何防止显示快照,并强制始终使用 LaunchScreen.xib,同时仍然保留应用状态保存/恢复功能优势?

最佳答案

经过研究,我发现Apple很早就提供了一种脱离UIApplication的方法来处理这种情况。但即使在今天,它的用法也很少被记录下来。

解决方案是使用 UIApplication 中的 ignoreSnapshotOnNextAppliationLaunch 方法。

Apple ignoreSnapshotOnNextApplicationLaunch method

您必须按照 Apple 的建议通过 UIApplication 单例模式访问它,我将在此处解释:

Apple UIApplication sharedApplication method

在哪里使用它是没有明确记录的,我在这里分享。 ignoreSnapshotOnNextApplicationLaunch 方法将完全无效,除非在 iOS 从 View Controller 保存应用程序状态时特别调用。例如当您点击主页按钮使应用程序成为背景时。

您不能直接从处理背景/前景转换的 AppDelegate 方法调用此方法,因为它需要从 View Controller 调用,同时保存它们的状态以供以后恢复。

Apple 为这个保存任务提供了来自 UIViewController 的 encodeRestorableStateWithCoder 方法

Apple encodeRestorableStateWithCoder method

这就是我们需要做出改变的地方。如果进行状态恢复,您应该已经拥有它;但是通过将此方法调用添加到您在 Storyboard 中设置恢复 ID 或手动保存状态的每个 View Controller 类,您可以通过从 UIApplication 单例中包含 ignoreSnapshotOnNextApplicationLaunch 来避免使用任何快照。这将不会阻止 iOS 拍摄快照,只是不会在重新启动时的应用状态恢复期间显示它。

// save any app state information that is not already saved automatically
- (void)encodeRestorableStateWithCoder:(NSCoder *)coder {

// prevent taking a screen shapshot and force launchScreen xib to be used always
[[UIApplication sharedApplication] ignoreSnapshotOnNextApplicationLaunch];

[super encodeRestorableStateWithCoder:coder];

return;
}

确保在测试期间添加此应用程序后重新设置应用程序后台,让 iOS 删除之前保存的快照文件。

关于ios - 在状态恢复期间显示应用程序屏幕快照而不是 launchScreen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43571418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com