经过研究,我发现Apple很早就提供了UIApplication的方法来处理这种情况。但即使在今天,其使用情况也鲜有记录。
解决方案是使用 UIApplication 中的ignoreSnapshotOnNextAppliationLaunch 方法。
Apple 忽略SnapshotOnNextApplicationLaunch 方法
您必须按照 Apple 的建议通过 UIApplication 单例模式访问它,我将对此进行解释:
Apple UIApplication 共享应用程序方法
The where使用它是没有明确记录的,我在这里分享。除非在 iOS 从视图控制器保存应用程序状态时专门调用,否则ignoreSnapshotOnNextApplicationLaunch 方法绝对不会产生任何效果。例如,当您点击主页按钮使应用程序后台运行时。
您不能直接从处理后台/前台转换的 AppDelegate 方法调用此方法,因为需要从视图控制器调用此方法,同时保存视图控制器的状态以供以后恢复。
对于此保存任务,Apple 提供了 UIViewController 中的encodeRestorableStateWithCoder 方法
苹果encodeRestorableStateWithCoder方法
这就是我们需要做出改变的地方。如果要进行状态恢复,您应该已经拥有它;但是,通过将此方法调用添加到在故事板中设置恢复 ID 或手动保存状态的每个视图控制器类,您可以通过包含 UIApplication 单例中的ignoreSnapshotOnNextApplicationLaunch 来避免使用任何快照。这会not阻止 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 删除之前保存的快照文件。