ios - 为什么 iOS 启动屏幕然后快照然后主屏幕?

标签 ios swift appdelegate

当我终止我的 iOS 应用程序并重新启动它时,我看到的快速屏幕顺序是

  1. 启动屏幕。 LaunchScreen.storyboard 中定义的屏幕。
  2. 快照。 iPhone 上次将我的应用置于后台时创建的屏幕图像。
  3. 主屏幕。我在 AppDelegateapplication(_:didFinishLaunchingWithOptions:) 方法中设置的 ViewController

从我读过的 Apple 文档来看,似乎在应用程序启动期间,如果存在快照,则 iOS 使用该快照而不是启动屏幕。为什么我同时看到启动屏幕快照?

这个屏幕录像显示了这个问题。启动屏幕是红色的。主屏幕是白色的。第二个屏幕是绿色的。我导航到绿屏,然后将应用程序置于后台,让 iOS 截取绿色屏幕截图。然后我杀了应用程序。重新启动应用程序时,顺序为启动/红色、屏幕截图闪烁/绿色、主页/白色。我在装有 iOS 12.1.1 的 iPhone 6 上进行测试。

https://imgur.com/a/EMX4dM1

来自 https://developer.apple.com/documentation/uikit/uiapplication/1623097-ignoresnapshotonnextapplicationl

As part of the state preservation process, UIKit captures your app’s user interface and stores it in an image file. When your app is relaunched, the system displays this snapshot image in place of your app’s default launch image to preserve the notion that your app was still running.

最佳答案

我无法确认您的描述。我的测试表明,如果您过早地终止您的应用程序,那么在下一次启动时,之前的后台屏幕截图将被丢弃,而只使用启动屏幕。

这是我的测试:

  • 启动画面是红色的

  • 初始 View Controller 的 View 是白色的

  • 辅助 View Controller 的 View 是绿色的

这是发生了什么:

  1. 您会看到我启动,然后从白色 View 移动到绿色 View 。

  2. 然后我将应用置于后台以确保拍摄快照。

  3. 然后我将应用程序带回前台,然后进入应用程序启动器,这样您就可以看到快照,它确实是绿色的。

  4. 然后我终止应用程序并重新启动它。我在这部分电影中使用了慢动作,你可以清楚地看到我们使用了红色的启动屏幕并逐渐淡入初始 View Controller 的白色;绿色再也不会出现。

enter image description here

也许您的测试程序有问题(仅在设备上测试)。也许启动时进入了错误的屏幕,然后又跳回了开始屏幕(这似乎是最有可能的解释)。

关于ios - 为什么 iOS 启动屏幕然后快照然后主屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53936423/

相关文章:

iOS:ViewDidAppear 上的方向检查旋转

iphone - 如何创建一个可以从不同 View Controller 访问的 NSMutable 数组

swift - 将多个字段添加到 CloudKit 中的同一 recordName 行

ios - 受宽度和纵横比限制的 View ,不更新高度

objective-c - 使用 ARC 时重新分配属性

iphone - 如果当前 View 是 tableViewController,iOS TableView 不会重新加载

swift - 在没有临时变量的情况下,快速排序无法使用交换功能正常工作

ios - Apple 远程推送通知在沙盒和生产模式下的行为似乎有所不同

ios - 如何在 AppDelegate.swift 中按常规顺序调用 ViewControllers

ios - Swift - 在 AppDelegate.swift 中设置依赖注入(inject)