如何停止 NSTimer.scheduledTimerWithTimeInterval

How to stop NSTimer.scheduledTimerWithTimeInterval

如何从 运行 停止 我的计时器?不像是暂停,而是停止。

import UIKit

class LastManStandingViewController: UIViewController {    

@IBOutlet weak var timeLabel: UILabel!
@IBOutlet weak var timeTextbox: UITextField!
@IBOutlet weak var startButton: UIButton!
@IBOutlet weak var stopButton: UIButton!

var myCounter = 0
var myTimer : NSTimer = NSTimer()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    timeLabel.text = String(myCounter)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func startTimer(){
    myTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateTimer"), userInfo: nil, repeats: true)
    println("func startTimer")
}

func stopTimer(){
    myTimer.invalidate()
    myCounter = 0
    timeLabel.text = String(myCounter)
    println("func stopTimer")
}

func updateTimer(){
    timeLabel.text = String(myCounter++)
    println("func updateTimer")
}
@IBAction func startButton(sender: AnyObject) {
    startTimer()
}
@IBAction func stopButton(sender: AnyObject) {
    stopTimer()
}

}

我可以启动计时器,但是当我按下“停止”按钮时,它会自行重置并重新开始计时。它不会停止。

成功了。我的项目出了问题!通过删除按钮并重新添加它们来修复它。看起来我有一个重复的东西。

当满足某些条件并且您想停止计时器时,您可以使用它:

Timer.invalidate()

这是一个简单的例子:

func UpdateTimer(){
    timeLabel.text = String(Counter++)
    if timeLabel.text == String("5") {
        Timer.invalidate()
    }
}

这将停止计时器。

您可以根据需要进行修改。

您不必使用 Selector:

@IBAction func startButton(sender: AnyObject) {
    myTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "updateTimer:", userInfo: nil, repeats: true)
}

此外,计时器将自身传递给所选方法,因此如果需要,您可以在方法内部使它无效:

func updateTimer(timer: NSTimer) {
    timeLabel.text = String(Counter++)
    timer.invalidate()
}

或者如果计时器是一个实例变量:

myTimer.invalidate()
myTimer = nil

nil 使实例变量 timer 无效后,这是一件好事,如果您需要使用相同的变量创建另一个计时器,它可以避免进一步的混淆。此外,方法名称和变量应以小写字母开头。

显示计时器无效并设置为零的屏幕截图。

更新 Swift 2.2+

有关替换 Selector().

的新 #selector 语法,请参阅

与 Swift 2.2

相同
let printTimer = NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: #selector(printDescription), userInfo: nil, repeats: true)

func printDescription() {
    print("Print timer will print every after 2.0 seconds")
}

Print timer will print every after 2.0 seconds