繁体   English   中英

当应用程序进入后台时暂停NSTimer

[英]Pause NSTimer when app goes to background

我在GameScene的touchesBegan函数中具有以下内容,因此计时器仅在用户触摸某个精灵时启动:

let start = SKAction.runBlock({
    NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "printDuration:", userInfo: NSDate(), repeats: true)
})

tapToStartNode.runAction(start)

和以下功能:

func printDuration(timer: NSTimer) {
    if self.view?.paused == false {
        guard let userInfo = timer.userInfo else {
            return
        }
        guard let startDate = userInfo as? NSDate else {
            return
        }
        let duration = NSDate().timeIntervalSinceDate(startDate)
        currentTime = NSDate().timeIntervalSinceDate(startDate)
        currentTimeValueLabel.text = "\(NSString(format:"%3.2f", duration))"
    }
}

但是,当applicationDidEnterBackground或applicationWillResignActive时,计时器不会暂停,并在应用程序位于backgorund中时继续运行。 我如何使其停止?

这里有个技巧可以解决您的问题

您可以在AppDelegate上使用func applicationDidEnterBackground(_ application: UIApplication)func applicationWillResignActive(_ application: UIApplication)

通过初始化rootViewController示例访问控制器:

let vc = self.window?.rootViewController as? ViewController

然后,您可以访问您的函数(确保函数处于公共状态)

vc.pauseTimer() (根据您的情况自定义)

希望对您有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM