从后台恢复显示 ModalViewController,避免下面的内容闪烁

Posted

技术标签:

【中文标题】从后台恢复显示 ModalViewController,避免下面的内容闪烁【英文标题】:Presenting ModalViewController on resume from background, avoiding flash of content underneath 【发布时间】:2012-06-25 14:58:55 【问题描述】:

在我的应用程序中,我在启动时在根视图控制器的顶部呈现了一个模态视图控制器,并且在从后台恢复以呈现加载/摘要屏幕时。这在几秒钟后被解除以显示根视图控制器。模态通过应用委托上的applicationWillEnterForeground 方法呈现。

一切正常,但是当从后台恢复时,在再次呈现加载模式之前看到下部根视图控制器的闪烁是很常见的。

我正在努力寻找一种明显的方法来进行此演示,以确保它安全地显示而无需先看到下面的视图。我是否遗漏了一些非常明显的东西?

【问题讨论】:

【参考方案1】:

documentation 表示如下:

准备拍照。 applicationDidEnterBackground:方法返回,系统取一个 应用程序用户界面的图片,并将生成的图像用于 过渡动画。如果您的界面中的任何视图包含 敏感信息,您应该先隐藏或修改这些视图 applicationDidEnterBackground: 方法返回。

这意味着您应该修改applicationDidEnterBackground: 中的视图,使其在应用程序进入后台状态时 ios 将自动拍摄的图片中显示为您希望的方式。

还要记住以下几点:

你的应用代理的 applicationDidEnterBackground: 方法有 大约 5 秒完成任何任务并返回。在实践中, 此方法应尽快返回。如果该方法确实 在时间用完之前不返回,您的应用程序将被杀死并清除 记忆。如果您仍需要更多时间来执行任务,请致电 beginBackgroundTaskWithExpirationHandler:请求后台的方法 执行时间,然后在辅助服务器中启动任何长时间运行的任务 线。无论您是否启动任何后台任务, applicationDidEnterBackground:方法仍必须在 5 内退出 秒。

【讨论】:

【参考方案2】:

我记得,当应用程序作为背景时,Apple 代码会截取屏幕截图并将其存储起来。当您的应用程序重新启动时,它会显示屏幕截图,直到您的应用程序完成并接管。

简短的回答,我认为无法避免内容的闪光。

你真的有两个选择,我只是建议制作一个简短的“出现”动画来实现平滑过渡。如果您尝试通过重新登录提示或其他方式保护敏感材料,那将不起作用。如果你正在处理这样的情况,你需要在进入后台状态时处理事情,而不是在你从它回来时处理事情。

【讨论】:

以上是关于从后台恢复显示 ModalViewController,避免下面的内容闪烁的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序从 WhatsApp 指纹屏幕等后台恢复时,每次打开启动画面

每次从后台恢复应用程序时都会打开启动屏幕,如WhatsApp指纹屏幕

应用从后台恢复时核心数据实体消失

iPhone iOS如何在应用程序从后台恢复时添加密码/密码锁定屏幕?

从后台堆栈恢复片段时的 savedInstanceState

如何检查 Fragment 是不是从后台恢复?