我想制作一个以10.0000000开始计时器的应用程序,我希望它完美倒计时 到目前为止,这是我的代码: import UIKitclass ViewController: UIViewController { @IBOutlet weak var labelTime: UILabel! var counter = 10.000
到目前为止,这是我的代码:
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秒.有任何想法吗?我应该对代码做出哪些更改?
谢谢
此外,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,
target: self,
selector: ("update:"),
userInfo: nil,
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)
}
}
