ios – 在applicationWillEnterForeground触发时更改UIView

我正在寻找一种方法来抓取当用户将应用程序发送到后台时向用户显示的当前视图.

情况是我在我的设置包中提供了选项,以便在触发applicationWillEnterForeground时我希望生效.

有人建议如何解决这个问题?

我试图注册一个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”).

我的最后一个建议是尝试调用[view setNeedsDisplay][view setNeedsLayout],它应该强制UIView重绘自己. (注意 – 问题不在于uiview更改没有显示,问题是它们在显示旧视图后显示.看起来在挂起应用程序之前拍摄了截屏,此屏幕截图最初在恢复应用程序性能时显示)

编辑

上面的代码是用户看到的一个很好的例子.标签“yo”显示,但仅在视图恢复后显示.我会看看能不能解决这个问题并重新发布.

编辑2

据我所知,恢复暂停的应用程序似乎会显示应用程序上次已知状态的捕获屏幕截图.我试图找到这种效果的文档,但我找不到它.

替代解决方案1

当用户点击主页按钮时,让您的应用程序退出.

如果您将应用程序的状态保存在applicationWillResignActive:或applicationWillTerminate:中,则可以简单地恢复该状态(导航到最后一个正确的选项卡用户)和appDidFinishLaunchingWithOptions:您可以在用户看到它之前更新UI.要在退回(暂停)时让您的应用程序退出,请将密钥“Application does not run in background” – raw key: UIApplicationExitsOnSuspend设置为YES.

这样做可以保证用户能够按照他们在设置中配置应用的方式看到您的应用,而不会看到它曾经看起来的闪烁.对不起,我找不到更好的方法来做到这一点.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...