这是我设置一个计时器功能,代码如下:
@IBAction func start(_ sender: UIButton) {
Timer.scheduledTimer(timeInterval: 1,
target: self,
selector:#selector(ViewController.action),
userInfo: nil,
repeats: true)
}
@objc func action() {
hoursMinutesSeconds()
if stop == true{
start = false
timer.invalidate()
timer.invalidate()
time = 0
}
}
@IBAction func stop(_ sender: UIButton){
start = false
timer.invalidate()
timer.invalidate()
time = 0
}
但是,当我点击停止功能时,此功能无效。意思是计时器不停。定时器stil工作......为什么?谢谢你的时间!!
答案 0 :(得分:3)
我认为你没有设置timer
值
timer = Timer.scheduledTimer(timeInterval: 1,
target: self,
selector:#selector(ViewController.action),
userInfo: nil,
repeats: true)
答案 1 :(得分:0)
确保您使Timer的正确实例无效。
与start function
中一样,您没有将计时器实例分配给任何对象,但在stop function
中,您使用timer
vaiable来停止该计时器。
这意味着您尝试使一个从未实例化的变量无效。
仍然尝试以下功能停止计时器,分配计时器变量。
@IBAction func stop(_ sender: UIButton) {
start = false
timer.invalidate()
timer = nil
time = 0
}
希望这项工作
答案 2 :(得分:0)
首先,您必须将其声明为fileprivate,如下所示:
fileprivate var timer = Timer()
@IBAction func start(_ sender: UIButton) {
self.timer = Timer.scheduledTimer(timeInterval: 4,
target: self,
selector: #selector(self.updateTimerForLocation),
userInfo: nil,
repeats: true)
}
@IBAction func stop(_ sender: UIButton) {
timer.invalidate()
}
答案 3 :(得分:0)
你在变量停止和func stop之间感到困惑。
你也不需要2个参数来管理停止/启动状态
- 对于你的问题, 你应该保留timer变量,以便能够在其他函数中使用它 声明全局计时器
var timer: Timer!
然后
timer = Timer.scheduledTimer(timeInterval: 1,
target: self,
selector:#selector(ViewController.action),
userInfo: nil,
repeats: true)
现在您可以在任何地方使其无效