如何停止我的计时器运行?不是暂停,而是停顿。
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()
}
}
我可以启动计时器,但是当我按下“停止”按钮时,它会自行重置,然后重新开始计时。它不会停止。
让它发挥作用。我的项目出了点问题!通过删除按钮并重新添加它来修复它。看起来我有重复或其他什么。
答案 0 :(得分:77)
您不必使用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
使其失效后,这是一件好事,如果你需要创建另一个具有相同变量的计时器,它可以避免进一步的混淆。此外,方法名称和变量应以小写字母开头。
屏幕截图显示计时器无效并设置为nil。
更新Swift 2.2 +
有关替换#selector
的新Selector()
语法,请参阅https://stackoverflow.com/a/36160191/2227743。
答案 1 :(得分:7)
您可以在满足某些条件并且想要停止计时器时使用此功能:
Timer.invalidate()
这是一个简单的例子:
func UpdateTimer(){
timeLabel.text = String(Counter++)
if timeLabel.text == String("5") {
Timer.invalidate()
}
}
这会停止计时器。
您可以根据需要进行修改。
答案 2 :(得分:-3)
正如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")
}
打印计时器将在2.0秒后打印