gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:27:51 27 4
gpt4 key购买 nike

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

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com