计时器不会以开始/暂停切换按钮开始

时间:2017-08-15 19:32:51

标签: swift swift3 timer

我想创建一个由一个按钮触发的计时器来启动计时器。当计时器运行时,我想要相同的按钮暂停计时器。

我主要在按钮标签的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()            
    }        
}

任何人都能解释一下吗?并帮助我一下?

1 个答案:

答案 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            
    }        
}