应用程序状态恢复时显示不确定活动指示器?

时间:2017-03-24 22:27:14

标签: ios swift uiactivityindicatorview state-restoration

我的应用程序中有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

但在这两种情况下都没有显示活动指示。我猜测应用程序在恢复时不会更新其视图状态。

有没有人设法在恢复应用状态时显示活动指示器,如果是这样的话?

2 个答案:

答案 0 :(得分:0)

如果您的恢复过程在主线程上执行,那么就会出现无法显示活动指示的原因。

尝试在后台线程上执行恢复过程。

答案 1 :(得分:0)

在状态恢复期间,您看到的不是应用程序的视图,而是在保留状态时拍摄的UI的快照图像。因此,在修复过程中对视图所做的任何更改(包括活动指示符)都不会被看到。

  

作为状态保存过程的一部分,UIKit会捕获您应用的用户界面并将其存储在图像文件中。当您的应用重新启动时,系统会显示此快照图像以代替您应用的默认启动图像,以保留您的应用仍在运行的概念。

(来自:Documentation for ignoreSnapshotOnNextApplicationLaunch()

相反,您可以使用UIApplicationWillResignActive通知捕获应用程序进入后台并对视图进行更改,以便将它们保留在稍后将在恢复时显示的快照中。这对于执行诸如禁用按钮之类的操作非常有用,这样用户可以在恢复期间看到他们无法与应用程序进行交互。然后在应用再次完全激活时,根据需要重新启用这些按钮。但是,如果您在此处添加活动指示器,则不会设置动画。

或者,您可以使用上面链接的ignoreSnapshotOnNextApplicationLaunch()在状态恢复期间显示启动屏幕,以使用户清楚地知道他们无法进行交互 - 这将在恢复完成时淡入恢复的视图。