我有这个应用程序,当该应用程序从后台返回或第二次启动时,它将显示一个密码屏幕,以及随后的所有其他应用程序。
但只有当应用程序在后台运行至少 30 秒且不少于该时间时,我才需要显示。
我怎样才能做到这一点?
我必须加载当前密码屏幕的代码位于 AppDelegate.swift:
func applicationDidBecomeActive(application: UIApplication) {
//Load lock screen
let topController = self.topViewControllerWithRootViewController(UIApplication.sharedApplication().delegate?.window??.rootViewController)
let userDefaults = NSUserDefaults.standardUserDefaults()
let displayedWalkthrough = userDefaults.boolForKey("Walk")
if displayedWalkthrough {
let main : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let lockVC = main.instantiateViewControllerWithIdentifier("LockVC") as! LockVC
topController.presentViewController(lockVC, animated: true, completion: nil)
} else {
}
}
最佳答案
最好的办法是创建一个后台任务,并在 30 秒后设置一个在 applicationDidBecomeActive()
中读取的标志。您必须使用 beginBackgroundTaskWithExpirationHandler
, here 。例如(使 task
成为全局任务):
进入后台时:
func applicationDidEnterBackground(application: UIApplication) {
task = application.beginBackgroundTaskWithExpirationHandler({})
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(30 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) {
NSUserDefaults.standardUserDefaults.setBool(true, forKey: "lock")
}
application.endBackgroundTask(task)
}
启动时:
func applicationDidBecomeActive(application: UIApplication) {
if NSNSUserDefaults.standardUserDefaults.boolForKey("lock") {
// show lock
}
application.endBackgroundTask(task)
NSUserDefaults.standardUserDefaults.setBool(true, forKey: "lock")
// rest of your code
}
关于swift - 如何在 Swift 后台一段时间后呈现 UIViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36928854/