在applicationWillEnterForeground之前更改视图

我想在后台一段时间后locking用户。 我正在AppDelegate的applicationWillEnterForeground捕捉这个(并比较存储在applicationWillResignActive时间)。 如果小于超时时间,则不执行任何操作。 如果超过超时时间,我会致电:

 [_navigationController popToRootViewControllerAnimated:NO]; 

这使用户回到根视图。

一个视觉中断,它工作得很好。 之前的视图(用户在应用程序不活动时查看的内容)在popup到根目录之前显示得非常简短。 在testing中,似乎该视图会在调用applicationWillEnterForeground之前重新出现。

我唯一的想法就是在不活动的时候隐藏所有的东西,比如用填充的矩形模糊视图。 这听起来像一个肮脏的黑客,所以我觉得有一个更好的办法。

我也打开不同的方式来达到同样的最终结果。 谢谢!

我已经通过使视图不可见来解决这个问题。 在applicationWillResignActive我有_navigationController.view.alpha = 0 ;,我已经放置_navigationController.view.alpha = 100; 在applicationWillEnterForeground之后(如有必要)popup到login视图。 比popup和恢复视图(在这种情况下非常重)更容易。

@TheBlack指出隐藏的属性,这可能在设备上稍微容易一些。 我离开阿尔法在因为A)它是有趣的debugging与50%的阿尔法视图,B)我只是喜欢阿尔法。 但除非你是像我这样的阿尔法粉丝,否则隐藏起来可能会好一点。

从文档: 处理应用程序状态转换的策略

准备应用程序快照

在应用程序委托的applicationDidEnterBackground:方法返回后不久,系统就会获取应用程序窗口的快照。 同样,当一个应用程序被唤醒来执行后台任务时,系统可能会拍摄一个新的快照以反映任何相关的变化。 例如,当一个应用程序被唤醒来处理下载的项目时,系统会拍摄一个新的快照,以便反映由于这些项目的合并而引起的任何变化。 系统在多任务用户界面中使用这些快照图像来显示您的应用程序的状态。

如果您在进入后台时对视图进行更改,则可以调用主视图的snapshotViewAfterScreenUpdates:方法来强制渲染这些更改。 在视图上调用setNeedsDisplay方法对于快照是无效的,因为快照是在下一个绘图循环之前拍摄的,因此不会呈现任何更改。 调用值为YES的snapshotViewAfterScreenUpdates:方法会立即更新快照设备使用的基础缓冲区。