5

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

[_navigationController popToRootViewControllerAnimated:NO];

这会将用户带回根视图。

它在一个视觉中断的情况下工作得很好。先前的视图(当应用程序处于非活动状态时用户正在查看的视图)在弹出到 root 之前非常短暂地出现。在测试中,视图似乎在applicationWillEnterForeground被调用之前重新出现。

我唯一的想法是在不活动之前隐藏所有内容,例如用填充的矩形遮挡视图。这对我来说就像一个肮脏的黑客,所以我认为有更好的方法。

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

4

2 回答 2

0

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

@TheBlack 指出了隐藏的属性,这在设备上可能稍微容易一些。我留下 alpha 是因为 A) 使用 50% 的 alpha 视图进行调试很有趣,并且 B) 我只是喜欢 alpha。但除非你是像我这样的 alpha 粉丝,否则隐藏可能会更好一些。

于 2011-06-06T14:55:47.030 回答
0

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

准备应用快照

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

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

于 2014-06-28T12:46:36.483 回答