我的应用程序中有app状态保存和恢复工作。恢复是CPU密集型的,在支持最旧的设备上,恢复应用程序状态最多可能需要5秒,所以我想在恢复应用程序状态时显示一个活动指示器。
在正在恢复的视图控制器中,我尝试过:
game = Game()
game.main()
我还尝试将其添加到App Delegate中的override public func decodeRestorableStateWithCoder(coder: NSCoder) {
showActivityIndicator()
//just creates and adds UIActivityIndicatorView to view controller's view
...
}
override public func applicationFinishedRestoringState() {
hideActivityIndicator()
}
:
UIWindow
但在这两种情况下都没有显示活动指示。我猜测应用程序在恢复时不会更新其视图状态。
有没有人设法在恢复应用状态时显示活动指示器,如果是这样的话?
答案 0 :(得分:0)
如果您的恢复过程在主线程上执行,那么就会出现无法显示活动指示的原因。
尝试在后台线程上执行恢复过程。
答案 1 :(得分:0)
在状态恢复期间,您看到的不是应用程序的视图,而是在保留状态时拍摄的UI的快照图像。因此,在修复过程中对视图所做的任何更改(包括活动指示符)都不会被看到。
作为状态保存过程的一部分,UIKit会捕获您应用的用户界面并将其存储在图像文件中。当您的应用重新启动时,系统会显示此快照图像以代替您应用的默认启动图像,以保留您的应用仍在运行的概念。
(来自:Documentation for ignoreSnapshotOnNextApplicationLaunch())
相反,您可以使用UIApplicationWillResignActive通知捕获应用程序进入后台并对视图进行更改,以便将它们保留在稍后将在恢复时显示的快照中。这对于执行诸如禁用按钮之类的操作非常有用,这样用户可以在恢复期间看到他们无法与应用程序进行交互。然后在应用再次完全激活时,根据需要重新启用这些按钮。但是,如果您在此处添加活动指示器,则不会设置动画。
或者,您可以使用上面链接的ignoreSnapshotOnNextApplicationLaunch()在状态恢复期间显示启动屏幕,以使用户清楚地知道他们无法进行交互 - 这将在恢复完成时淡入恢复的视图。