情况是我在我的设置包中提供了选项,以便在触发applicationWillEnterForeground时我希望生效.
有人建议如何解决这个问题?
我试图注册一个NSNotification,但它会触发,并且在NSNotification方法运行之前,用户会看到该视图.
解决方法
- (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”).
我的最后一个建议是尝试调用[view setNeedsDisplay]
和[view setNeedsLayout]
,它应该强制UIView重绘自己. (注意 – 问题不在于uiview更改没有显示,问题是它们在显示旧视图后显示.看起来在挂起应用程序之前拍摄了截屏,此屏幕截图最初在恢复应用程序性能时显示)
编辑
上面的代码是用户看到的一个很好的例子.标签“yo”显示,但仅在视图恢复后显示.我会看看能不能解决这个问题并重新发布.
编辑2
据我所知,恢复暂停的应用程序似乎会显示应用程序上次已知状态的捕获屏幕截图.我试图找到这种效果的文档,但我找不到它.
替代解决方案1
如果您将应用程序的状态保存在applicationWillResignActive:或applicationWillTerminate:中,则可以简单地恢复该状态(导航到最后一个正确的选项卡用户)和appDidFinishLaunchingWithOptions:您可以在用户看到它之前更新UI.要在退回(暂停)时让您的应用程序退出,请将密钥“Application does not run in background” – raw key: UIApplicationExitsOnSuspend设置为YES.
这样做可以保证用户能够按照他们在设置中配置应用的方式看到您的应用,而不会看到它曾经看起来的闪烁.对不起,我找不到更好的方法来做到这一点.