如何解决终止应用后,快速继续计时器
我正在构建一个应用程序,用户可以在其中记录他们使用的时间。现在从理论上讲,它可以工作。问题是:有时用户会进入后台,甚至终止应用程序,但是当它重新启动时,计时器应该继续计数并显示自启动以来的时间。现在,当应用重新启用时,它从新的位置开始。
代码在这里
didFinishLaunching中的AppDelegate:
if HelperFunctions.isKeyPresentInUserDefaults(key: "startedTimer") == true {
UserDefaults.standard.set(Int(NSDate().timeIntervalSince1970),forKey: "reenteredTime")
let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "Main",bundle: nil)
let initialViewControlleripad : UIViewController = mainStoryboardIpad.instantiateViewController(withIdentifier: "timerStarted") as UIViewController
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = initialViewControlleripad
self.window?.makeKeyAndVisible()
}
return true
}
和计时器所在的ViewController:
override func viewDidLoad() {
super.viewDidLoad()
if HelperFunctions.isKeyPresentInUserDefaults(key: "startedTimer") == true {
let timeNow = UserDefaults.standard.integer(forKey: "reenteredTime")
let timeStarted = Int(UserDefaults.standard.string(forKey: "startedTime")!)
let passedTime = timeNow - timeStarted!
print(passedTime)
timeLabel.text = timeString(time: TimeInterval(passedTime))
} else {
runTimer()
}
}
func runTimer() {
UserDefaults.standard.set(Int(NSDate().timeIntervalSince1970),forKey: "startedTimer")
timer = Timer.scheduledTimer(timeInterval: 1,target: self,selector: #selector(ScanTimeLogViewController.updateTimer),userInfo: nil,repeats: true)
RunLoop.current.add(timer,forMode: .common)
}
@objc func updateTimer() {
seconds += 1 //This will decrement(count down)the seconds.
timeLabel.text = timeString(time: TimeInterval(seconds))
}
func timeString(time:TimeInterval) -> String {
let hours = Int(time) / 3600
let minutes = Int(time) / 60 % 60
let seconds = Int(time) % 60
return String(format:"%02i:%02i:%02i",hours,minutes,seconds)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。