在applicaitonWillEnterForeground中更改rootViewController

时间:2013-04-15 15:09:44

标签: ios uiview storyboard application-lifecycle

长话短说,我正试图在rootViewController上更改我的iOS应用applicationWillEnterForeground:,如下所示:

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    MyViewController *controller = [[MyViewController alloc] init];
    self.window.rootViewController = controller;
}

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

解决此问题的一种方法是简单地将代码移至- (void)applicationDidEnterBackground:,但此解决方案的问题在于,在我的应用中,无法确定是否有新的rootViewController分配到- (void)applicationWillEnterForeground:(UIApplication *)application(它基于离开应用程序后经过的时间)。

如何在iOS执行将应用程序从后台运行到前台的动画之前强制应用程序重绘?

1 个答案:

答案 0 :(得分:1)

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

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

  

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

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

Apple没有明确记录您以后不能修改或替换此屏幕截图,但他们也没有说出我所知道的相反情况。