ios – 使用Swift中的NSTimer在几个十进制插槽中倒计时
发布时间:2020-12-14 17:13:24 所属栏目:百科 来源:网络整理
导读:我想制作一个以10.0000000开始计时器的应用程序,我希望它完美倒计时 到目前为止,这是我的代码: import UIKitclass ViewController: UIViewController { @IBOutlet weak var labelTime: UILabel! var counter = 10.0000000 var labelValue: Double { get { r
我想制作一个以10.0000000开始计时器的应用程序,我希望它完美倒计时
到目前为止,这是我的代码: import UIKit class ViewController: UIViewController { @IBOutlet weak var labelTime: UILabel! var counter = 10.0000000 var labelValue: Double { get { return NSNumberFormatter().numberFromString(labelTime.text!)!.doubleValue } set { labelTime.text = "(newValue)" } } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view,typically from a nib. labelValue = counter var timer = NSTimer.scheduledTimerWithTimeInterval(0.0000001,target: self,selector: ("update"),userInfo: nil,repeats: true) } func update(){ labelValue -= 0.0000001 } } 会发生什么事情,我的倒计时非常慢,它只是不起作用,需要1小时才能达到0秒,而不是仅仅10秒.有任何想法吗?我应该对代码做出哪些更改? 解决方法
定时器不是超精确的,NSTimer的分辨率大约是1/50秒.
此外,iPhone屏幕的刷新率为60帧/秒,因此以更快的速度运行计时器完全没有意义. 而不是每次触发时都尝试使用计时器递减某些内容,而是创建一个每秒触发50次的计时器,并让它使用时钟数学来根据剩余时间更新显示: var futureTime: NSTimeInterval override func viewDidLoad() { super.viewDidLoad() labelValue = counter //FutureTime is a value 10 seconds in the future. futureTime = NSDate.timeIntervalSinceReferenceDate() + 10.0 var timer = NSTimer.scheduledTimerWithTimeInterval( 0.02,selector: ("update:"),repeats: true) } func update(timer: NSTimer) { let timeRemaining = futureTime - NSDate.timeIntervalSinceReferenceDate() if timeRemaining > 0.0 { label.text = String(format: "%.07f",timeRemaining) } else { timer.invalidate() //Force the label to 0.0000000 at the end label.text = String(format: "%.07f",0.0) } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |