1

长话短说,我正在尝试更改我的 iOS 应用的rootViewControlleron 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执行将应用程序从后台带到前台的动画之前,如何强制应用程序重绘?

4

1 回答 1

1

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

此行为部分记录在iOS 应用程序编程指南的“移至后台”部分中:

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

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

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

于 2013-04-15T17:11:41.187 回答