我使用Xcode和swift 3来制作一个基本的计时器。我有一个连接到我的视图控制器的计时器标签,它每秒更新标签。当计时更长时间时,秒数会更快(参见GIF)。
任何人都可以解释我做错了什么,或者我不应该做什么(错误的方法,更好的功能)?
这是相关代码:
@IBAction func startButtonTabbed(_ sender: UIButton) {
if (sender == startButton) {
let now = Date()
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
start_time = formatter.string(from:now)
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.timerAction), userInfo: nil, repeats: true)
} else {
timer.invalidate()
}
}
func timerAction() {
time += 1;
updateTimingLabel(seconds: time)
}
func updateTimingLabel(seconds: Int) {
self.timerLabel.text = stringFromTimeInterval(interval: TimeInterval(time)) as String
}
func stringFromTimeInterval(interval: TimeInterval) -> NSString {
let ti = NSInteger(interval)
let seconds = ti % 60
let minutes = (ti / 60) % 60
let hours = (ti / 3600)
return NSString(format: "%0.2d:%0.2d:%0.2d",hours,minutes,seconds)
}
这就是:
答案 0 :(得分:1)
可能你按了2次开始按钮,你安排了两个计时器。 试试这个
@IBAction func startButtonTabbed(_ sender: UIButton) {
if (sender == startButton) {
if !timer.isValid{
let now = Date()
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
start_time = formatter.string(from:now)
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.timerAction), userInfo: nil, repeats: true)
}
} else {
timer.invalidate()
}
}