在 applicaitonWillEnterForeground 中更改 rootViewController

Posted

技术标签:

【中文标题】在 applicaitonWillEnterForeground 中更改 rootViewController【英文标题】:Changing rootViewController in applicaitonWillEnterForeground 【发布时间】:2013-04-15 15:09:44 【问题描述】:

长话短说,我正在尝试将我的 ios 应用的 rootViewController 更改为 applicationWillEnterForeground:,如下所示:

- (void)applicationWillEnterForeground:(UIApplication *)application

    MyViewController *controller = [[MyViewController alloc] init];
    self.window.rootViewController = controller;

然而,当 iOS 执行“放大”动画时,当应用程序从后台移动到前台时,它仍然显示之前的rootViewController 的视图。然后,一旦动画完成,应用程序就会将新的rootViewController 的视图爆炸到屏幕上。

解决此问题的一种方法是将代码移至- (void)applicationDidEnterBackground:,但此解决方案的问题是,在我的应用程序中,无法判断是否会分配新的rootViewController,直到@987654328 @(基于离开应用程序后经过的时间)。

如何在 iOS 执行将应用从后台移至前台的动画之前强制应用重绘?

【问题讨论】:

【参考方案1】:

我相信这是不可能的。当你的应用程序进入前台时,iOS 显示的屏幕实际上是应用程序进入后台时系统截取的屏幕截图。当应用返回前台时,无法操作或替换该图像。

iOS 应用程序编程指南的Moving to the Background section 部分记录了此行为:

应用可以使用它们的applicationDidEnterBackground: 方法来准备移动到后台状态。移至后台时,所有应用都应执行以下操作:

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

Apple 没有明确记录您以后不能修改或替换此屏幕截图,但他们也没有在我所知道的任何地方说相反的内容。

【讨论】:

这是我绝对害怕的事情......如果您可以提供参考或者我找不到其他解决方案,我会将其标记为答案。 令我失望的是,这似乎是真的。 iOS 7:能够在启动前自定义启动图像吗? :)

以上是关于在 applicaitonWillEnterForeground 中更改 rootViewController的主要内容,如果未能解决你的问题,请参考以下文章

秋的潇洒在啥?在啥在啥?

上传的数据在云端的怎么查看,保存在啥位置?

在 React 应用程序中在哪里转换数据 - 在 Express 中还是在前端使用 React?

存储在 plist 中的数据在模拟器中有效,但在设备中无效

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据