当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议是尝试调用 (注意 – 问题不在于uiview的变化没有显示出来,问题是它们在显示旧视图后显示,在暂停应用程序之前出现一个屏幕截图,这个屏幕截图最初在恢复应用程序的性能时显示) [view setNeedsDisplay]
和[view setNeedsLayout]
,这应该强制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
- 使用animation隐藏和显示滚动视图
- ShouldChangeTextInRange不被UITextView调用
- 访问iOS中的环境光线传感器
- didUpdateHeading标题从未在iOS 11下调用过
- 如何在UIWebView而不是Safari中打开UITextView网页链接?
- 在任何Mac上获得触控栏功能
- iOS 11 Beta中的scopeButtons忽略了UISearchController.hidesNavigationBarDuringPresentation
- iOS中的同步队列与异步队列
- UICollectionView – iOS 10 – iPhone 6 Plus模拟器崩溃,但适用于真实设备