从多任务返回时防止应用程序的快照视图

11
问题是这样的-我的应用程序可以使用类似于手机密码保护的界面进行密码保护。这一直很好用,直到多任务处理出现。虽然密码保护仍然有效,但存在一个问题。苹果公司采取了一些特殊措施,使我们的应用程序在从后台返回时看起来加载得更快。操作系统在用户离开应用程序之前拍摄我们屏幕的图片,并在其余应用程序仍在加载时显示该图片。
这会导致的问题是,试图进入我的应用程序的人会在密码保护生效之前看到那张屏幕的图片。尽管只是短暂的一瞥,但我认为我的用户不会喜欢别人能够稍稍窥视他们的数据。如何阻止显示那个快照图片?

把你的研究问题放在SO上并不是一个好主意。 - Robin
我发现这很有趣,但事实上,这并不是适合它的地方。应该只发布那些具有明确答案可能被标记为正确的问题。这根本不是问题。 - crimson_penguin
请将此内容转化为一个实际的问题,并提供自己的答案,否则您的帖子可能会被标记为删除,尽管您的意图良好。 - BoltClock
我关闭按钮有点太快了。现在这是一个合理的问题(因为它已经变成了一个问题)。 - Caleb
没问题,我投了一张重新开启投票。 - BoltClock
3个回答

15

我已经解决了这个问题,以下是解决方案:

- (void)applicationDidEnterBackground:(UIApplication *)application{
    if (appHasPasscodeOn){
        UIImageView *splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0, 320, 480)];
        splashView.image = [UIImage imageNamed:@"Default.png"];
        [window addSubview:splashView];
        [splashView release];
    }
}

Default.png是我的应用程序的截图,显示为一个空白屏幕(对我来说只是一个空白的listview)。上面的代码将其放在我的真实视图前面,就在应用程序进入后台之前。因此,当您回到应用程序时,您所看到的就是它。大功告成。


2
我相信苹果的文档说要在 applicationDidEnterBackground: 中执行此操作。applicationWillResignActive: 在许多其他时间也会被调用,而这可能不是适当的时机。(例如系统警报、调用多任务 UI 等) - Jesse Rusak
好观点,Jesse。我已经编辑了代码,以指示正确的方法来放置它。 - Elijah

4

对我来说,标记的答案完美地解决了问题,但当应用程序再次变为活动状态时,闪屏视图仍停留在屏幕上。我将其作为属性,并在我的applicationWillEnterForeground中添加了[splashView removeFromSuperview]以修复它。如果有人遇到类似的行为,请参考此方法。


1

以下是Swift 3.0中的解决方案:

lazy var splashImageView: UIImageView = {
    let splashImageView = UIImageView(frame: UIScreen.main.bounds)
    splashImageView.image = UIImage(named: "splash-view")
    return splashImageView
}()

func applicationDidEnterBackground(_ application: UIApplication) {
    window?.addSubview(splashImageView)
}

func applicationWillEnterForeground(_ application: UIApplication) {
   splashImageView.removeFromSuperview()
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接