当applicationWillEnterForeground触发时更改UIView

我正在寻找一种方法来抓取显示给用户的当前视图,当他们发送应用程序的背景。

情况是,我已经提供了我的设置包中的选项,看起来和感觉,我想在applicationWillEnterForeground被触发时生效。

任何人都有如何解决这个问题的build议?

我试图注册一个NSNotification,但它触发的时间晚,并且在NSNotification方法运行之前,视图出现在用户面前。

要获取用户背景显示的当前视图,请使用AppDelegate的applicationDidEnterBackground方法。

 - (void)applicationDidEnterBackground:(UIApplication *)application { // Get current view... // (get from UITabbarController or whatever logic you like) // For this code sample, just grab first UIView under the main window UIView *myView = [self.window.subviews objectAtIndex:0]; } 

要在显示之前更改视图,请使用AppDelegate的applicationWillEnterForeground方法,如下所示:

 - (void)applicationWillEnterForeground:(UIApplication *)application { UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 80, 80)]; label.backgroundColor = [UIColor whiteColor]; label.text = @"yo"; [self.myLastView addSubview:label]; } 

我意识到你在你的问题中提到了applicationWillEnterForeground。 你可以更具体的你正在做什么或可能包括代码? 我其实尝试了上面的代码和视图更新(我看到我的视图上方的标签"yo"

我最后的build议是尝试调用[view setNeedsDisplay][view setNeedsLayout] ,这应该强制UIView自己重绘。 (注意 – 问题不在于uiview的变化没有显示出来,问题是它们在显示旧视图后显示,在暂停应用程序之前出现一个屏幕截图,这个屏幕截图最初在恢复应用程序的性能时显示)

编辑

上面的代码是用户正在看到的一个很好的例子。 标签"yo"出现,但只有在视图恢复后。 我会看看我是否可以解决这个问题,并转发。

编辑2

看来,恢复暂停的应用程序显示应用程序的最后一个已知的状态截图,据我所知。 我试图find这样的文档,但我找不到它。

替代解决scheme1

当用户点击主页button时,让您的应用程序退出。

如果您在applicationWillResignActive:applicationWillTerminate:保存应用程序的状态,则可以简单地恢复该状态(导航到正确的选项卡用户最后一次),并在appDidFinishLaunchingWithOptions:您可以在用户看到它之前更新UI。 要让您的应用程序在后台(挂起)时退出,请将“应用程序不在后台运行”键 – 原始键:UIApplicationExitsOnSuspend设置YES

这样做可以保证用户将看到你的应用程序在设置中configuration它的方式,而不会看到过去看起来的闪烁。 对不起,我找不到更好的方法来做到这一点。 🙁

替代解决scheme2

在您的应用内显示您的设置。

这显然需要devise更改,但越来越多的应用程序正在显示应用程序内的设置。 一个stream行的第三方库是在应用程序设置工具包 。 这使您可以像使用全局应用程序设置一样通过捆绑包/ plist文件来configuration设置。 它也看起来和行为就像全球设置。 这将让你完全控制你的应用程序内的任何行为。

我会猜测你有倒退。

系统可以拍摄当前屏幕的快照,并在应用程序恢复到前台时显示。 在applicationWillEnterForeground:time之前,您可能会看到这个快照显示旧的外观。

所以,当你得到applicationWillEnterForeground的时候改变,那么快照将从你想要恢复的内容中获取。

在每个viewDidLoad你总是可以发布一个通知,参见NSNotification Class Reference ,你可以在NSUserDefaults存储一个对视图的NSUserDefaults ,然后当用户在applicationWillEnterForeground:返回时做你需要做的事情applicationWillEnterForeground:

以防有人遇到同样的问题:
看起来,苹果已经在UIApplication iOS7中实现了一个新的属性,当重新进入前台时阻止使用先前拍摄的快照 – ignoreSnapshotOnNextApplicationLaunch