我想创建一个由一个按钮触发的计时器来启动计时器。当计时器运行时,我想要相同的按钮暂停计时器。
我主要在按钮标签的IBAction中处理这种行为:
@IBAction func btn_start(_ sender: Any) {
if timerIsRunning == false {
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(runTimer), userInfo: nil, repeats: true)
timerIsRunning = true
}
if timerIsRunning == true {
timer.invalidate()
timerIsRunning = false
}
}
我认识到我可以多次触发启动按钮并且计时器也被触发了几次,因此计时器最终加速了。 为了防止这种行为,我引入了带有意外结果的timerIsRunning:Bool,计时器不再启动: - /
这是我的计时器功能,由计时器触发:
func runTimer() {
if timeInSeconds >= 0 {
timeInSeconds = timeInSeconds - 1
updateTimerLabel()
}
}
任何人都能解释一下吗?并帮助我一下?
答案 0 :(得分:3)
启动计时器后,您应该return
,或使用else
。否则,您始终会在方法的第二个invalidate
块中if
新创建的计时器:
@IBAction func btn_start(_ sender: Any) {
if !timerIsRunning {
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(runTimer), userInfo: nil, repeats: true)
timerIsRunning = true
} else {
timer.invalidate()
timerIsRunning = false
}
}