对于我正在开发的应用程序,我实现了一个锁定屏幕,允许用户通过手动pin或touch / Face-ID解锁应用程序。
在正常使用期间,一切正常。
但是,我需要在应用程序从后台甚至在任务切换器中恢复时显示锁定屏幕,以避免在没有正确解锁的情况下“窥视”内容。
根据Apple在此(旧)article中的建议,我在 applicationDidEnterBackground 中展示了锁定视图控制器:
func applicationDidEnterBackground(_ application: UIApplication) {
let lockVC = LoginViewController()
lockVC.loginType = LoginViewController.LoginType.resumeApp
if let topViewController = UIApplication.topViewController() {
topViewController.present(lockVC, animated: false, completion: nil)
}
}
其中topViewControler是确定最顶层视图控制器的有用扩展:Get top most UIViewController
lockVC.loginType = ... 只是让ViewController我需要什么类型的登录并稍微定制其视图
我得到的结果有点奇怪,无论是在模拟器还是真实设备上:
我相信我在这里缺少一些大事......但没有找到其他提示。
没有一个现成的锁屏解决方案附带一个后台/ taskSwicth / resume案例。
请注意,如果我使用上面提到的最顶层视图控制器的扩展名,或者我只是尝试通过
来呈现它,那么黑/无响应的屏幕似乎都是相同的self.window?.rootViewController?.present(lockVC, animated: false)
(我认为这是错误的,但无论如何都要尝试)
任何帮助都是apreciated
答案 0 :(得分:0)
我找到了一个临时解决方法:
通过在应用程序发送到后台的当前屏幕上添加模糊效果( applicationWillResignActive )来隐藏任务切换器中的信息,并在应用再次激活时将其删除( applicationDidBecomeActive ),如建议Dev_Tandel
如上所述,这是我想分享的临时解决方法,但我不喜欢100%。需要在任务swtcher中显示锁定屏幕,并且我已经看过应用程序正在执行此操作(例如" here")。
仍在寻求帮助。
答案 1 :(得分:0)
解决了,感谢post。 显然我试图用它的对象实例呈现一个视图控制器是天真的。
如果我使用
let lockVC = topViewController.storyboard?.instantiateViewController(withIdentifier: "IDLoginViewController") as! LoginViewController
一切正常,锁屏也显示在任务切换器中,无需模糊!