在applicationWillEnterForeground之前更改视图

时间:2011-05-23 22:10:21

标签: ios uinavigationcontroller uiapplicationdelegate

我希望在一段时间处于后台后将用户锁定在我的应用之外。我在AppDelegate的applicationWillEnterForeground中捕捉到这一点(并与applicationWillResignActive中存储的时间进行比较)。如果小于超时时间,则不执行任何操作。如果超过我打电话的超时时间:

[_navigationController popToRootViewControllerAnimated:NO];

将用户带回根视图。

一次视觉中断,效果非常好。在弹出到root之前,先前的视图(用户在应用程序处于非活动状态时正在查看的视图)显示非常短暂。在测试中,似乎视图在applicationWillEnterForeground被调用之前重新出现。

我唯一的想法就是在变为非活动状态之前隐藏所有内容,例如通过用填充矩形遮盖视图。这对我来说就像是一个肮脏的黑客,所以我觉得有更好的方法。

我也愿意以不同的方式达到相同的最终结果。谢谢!

2 个答案:

答案 0 :(得分:0)

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

@TheBlack指出隐藏属性,这可能在设备上稍微容易一些。我要离开alpha因为A)用50%的alpha视图调试很有趣,而B)我就像alpha一样。但除非你像我这样的阿尔法粉丝,隐藏的可能会好一些。

答案 1 :(得分:0)

来自文档:Strategies for Handling App State Transitions

  

准备应用程序快照

     

在app委托的applicationDidEnterBackground:方法返回后不久,系统会拍摄应用程序窗口的快照。类似地,当应用程序被唤醒以执行后台任务时,系统可以拍摄新的快照以反映任何相关的更改。例如,当唤醒应用程序以处理下载的项目时,系统会拍摄新的快照,以便反映由项目合并引起的任何更改。系统在多任务UI中使用这些快照图像来显示应用程序的状态。

     

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