当应用程序进入后台时更改 rootview 控制器 (applicationDidEnterBackground)

Posted

技术标签:

【中文标题】当应用程序进入后台时更改 rootview 控制器 (applicationDidEnterBackground)【英文标题】:Change rootview controller when app goes to background (applicationDidEnterBackground) 【发布时间】:2016-03-08 16:17:24 【问题描述】:

当用户真正进入后台时,我需要显示黑屏。 (不是 applicationWillResignActive)。

因此,我在 applicationDidEnterBackground 中像这样更改我的根视图控制器。

//Before this, there will be Sync web-service call...normally, it is fast..time out is 2 second  
dispatch_async(dispatch_get_main_queue(), ^
    UIViewController *vc = [[UIViewController alloc] init];
    [vc.view setBackgroundColor:[UIColor blackColor]];
    [AppDelegate instance].window.rootViewController = vc;
);

问题是它不起作用。我以为是因为没有足够的时间。所以我研究了延长后台时间,但还是不行。我该怎么做才能在用户完全进入后台时显示黑屏(当用户切换应用程序时,他们会看到我的应用程序为黑屏)?

objective c - Proper use of beginBackgroundTaskWithExpirationHandler

【问题讨论】:

您这样做是为了增加用户的隐私级别吗?当用户返回应用程序时,您是否要改回原来的视图控制器? 是的。我会改回原来的VC。 你的应用委托的applicationDidEnterBackground回调中的sn-p吗?不要将其包装在 dispatch_async 中。在该方法返回后拍摄快照,因此您会在拍摄快照后导致 vc 更改发生。 是的。它在 applicationDidEnterBackground 里面。我取出 dispatch_async 并且它不工作。我需要先访问网络服务,如果返回是,我会显示黑屏。 添加一个覆盖屏幕的视图,而不是更改根视图控制器。然后在用户再次进入时将其移除。 【参考方案1】:

尝试在应用程序进入后台时向窗口添加新视图,而不是更改窗口的根视图控制器,并根据您的要求将其删除/隐藏。将视图的背景颜色设置为黑色。祝你好运。

【讨论】:

以上是关于当应用程序进入后台时更改 rootview 控制器 (applicationDidEnterBackground)的主要内容,如果未能解决你的问题,请参考以下文章

更改 RootView 控制器 Xamarin IOS 应用程序

SplitViewController - 可以更改 rootview 和 detailview 的 z 顺序吗?

当应用程序进入和退出后台时更新ios中的计时器

当视图控制器进入后台时收到通知

将场景中的 rootview 更改为视图控制器?

在进入后台时将 UIDocument 上传到 iCloud