swift - 如何在 Swift 后台一段时间后呈现 UIViewController?

标签 swift ios9 nstimer appdelegate

我有这个应用程序,当该应用程序从后台返回或第二次启动时,它将显示一个密码屏幕,以及随后的所有其他应用程序。

但只有当应用程序在后台运行至少 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/

相关文章:

swift - 字典的扩展 where <String, AnyObject>

ios - 将 NSPredicate 应用于字典 IOS 内的数组

ios - 使用 NSTimer 作为时钟运行定义的时间

iphone - 具有委托(delegate)方法的 NSTimer

xcode - iOS 9 - 使用 Xcode 和 Swift 1.2 构建的扭曲的 UI

iOS 在 600 秒后杀死我的后台任务

swift - Swift 下标实现可以设置元组值吗?

swift - 使用 Swift 停止一个球 Sprite 套件

ios - UITableViewCell IBOutlets 为零

ios - iOS 上的多个用户