【问题标题】:Why iOS Launch Screen then Snapshot then Home Screen?为什么是 iOS 启动屏幕,然后是快照,然后是主屏幕?
【发布时间】:2019-05-24 23:22:45
【问题描述】:

当我终止我的 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

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

【问题讨论】:

  • 您是否使用状态保存并调用ignoreSnapshotOnNextApplicationLaunch()?如果不是,它与问题有什么关系?即使是这样,如果您人为地杀死您的应用程序,则没有状态保存并且无法调用该方法。
  • 我没有打电话给ignoreSnapshotOnNextApplicationLaunch()。我没有使用状态保存。看起来应用程序/iOS 在创建屏幕截图时正在保存状态。
  • 不,状态保存是做或不做的事情。屏幕截图的创建与此无关。
  • 您的故事板是否开启了状态保存功能?
  • 我也遇到了同样的问题,这真的让我烦恼了好几天......在我的情况下,它只发生在多窗口打开时。

标签: ios swift appdelegate


【解决方案1】:

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

这是我的测试:

  • 启动画面为红色

  • 初始视图控制器的视图是白色的

  • 辅助视图控制器的视图为绿色

会发生什么:

  1. 您将看到我启动,然后从白色视图移动到绿色视图。

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

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

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

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

【讨论】:

  • 我重新创建了您的测试,但仍然有同样的意外结果。屏幕截图/绿色在启动/白色和主页/红色之间闪烁。请查看我在原帖中添加的屏幕录像的链接。
  • 酷!现在我们需要弄清楚有什么区别。 :)
  • 这一次,我完全用故事板创建了这个应用程序。更改启动屏幕的颜色。将主屏幕包裹在导航控制器中。在主屏幕上添加一个按钮以显示第二个/绿色屏幕。而已。我对具有LaunchScreen.storyboard 和所有其他视图以编程方式创建和显示的应用程序做了同样的事情。 iPhone 6 上的结果相同。
  • 是的,我的应用和你的一样。 — 为什么你有一个红色的状态栏?这是什么iOS版本?
  • 红色状态栏表示我正在录屏。我在 iPhone 6 上使用 iOS 12.1.1。我使用 Xcode 10.1 创建了该应用程序。
猜你喜欢
  • 2013-03-13
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 2011-10-24
相关资源
最近更新 更多