gpt4 book ai didi

ios - 在 Swift 中使用 NSTimer 的几个小数槽的倒计时

转载 作者:搜寻专家 更新时间:2023-10-31 22:03:09 24 4
gpt4 key购买 nike

例如,我想制作一个计时器从 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,
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)
}
}

关于ios - 在 Swift 中使用 NSTimer 的几个小数槽的倒计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30945310/

24 4 0
文章推荐: java - 将按位运算Java代码转换为PHP
文章推荐: html - 根据行数动态地在
中垂直居中 ?
文章推荐: PHP cURL 超时被忽略?