有没有人知道我怎么能告诉计时器在达到0时停止。现在它继续倒数到零以下。
import UIKit
class ViewController: UIViewController {
var timerCount = 20
var timerRunning = false
var timer = NSTimer()
@IBOutlet weak var timerLabel: UILabel!
func Counting() {
timerCount -= 1
timerLabel.text = "\(timerCount)"
}
@IBAction func startButton(sender: UIButton) {
if timerRunning == false {
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector ("Counting"), userInfo: nil, repeats: true)
timerRunning = true
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
if timerCount == 0 {
timerRunning = false
}
}
}
答案 0 :(得分:5)
将您的Counting
功能更改为:
func Counting() {
timerCount -= 1
timerLabel.text = "\(timerCount)"
if timerCount == 0 {
timer.invalidate()
timerRunning = false
}
}
停止计时器
invalidate()
停止接收器再次发射并请求将其从运行循环中移除。
讨论
此方法是从NSRunLoop对象中删除计时器的唯一方法。 NSRunLoop对象在invalidate方法返回之前或之后的某个时间点删除其对计时器的强引用。
如果配置了目标和用户信息对象,接收者也会删除对这些对象的强引用。
特别注意事项
您必须从安装了计时器的线程发送此消息。如果从另一个线程发送此消息,则与该计时器关联的输入源可能不会从其运行循环中删除,这可能会阻止该线程正常退出。
答案 1 :(得分:3)
此外,还有一些额外的建议:将当地的状态保持在最低限度。您可以删除timerRunning
变量,因为该状态已经通过其NSTimer
属性位于valid
。
如果您只看到一个地方,它可以简化代码并减少状态错误。