Как остановить 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()
}
}
Я могу запустить таймер, но когда я нажимаю кнопку "Стоп", он сам reset и снова начинает подсчет. Это не останавливается.
Сделал работу. Что-то было плохо с моим проектом! Исправлено, удалив кнопку и повторно добавив ее. Похоже, у меня был дубликат или что-то в этом роде.
Ответы
Ответ 1
Вам не нужно использовать 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
таймер переменной экземпляра после его недействительности, он избегает дальнейшей путаницы, если вам нужно создать еще один таймер с той же переменной. Кроме того, имена методов и переменные должны начинаться с строчной буквы.
Снимок экрана, чтобы показать таймер недействительным и установить на нуль.
![screenshot]()
Обновление для Swift 2.2 +
См. fooobar.com/questions/137199/... для нового синтаксиса #selector
, заменяющего Selector()
.
Ответ 2
вы можете использовать это, когда какое-либо условие выполнено, и вы хотите остановить таймер:
Timer.invalidate()
Вот простой пример:
func UpdateTimer(){
timeLabel.text = String(Counter++)
if timeLabel.text == String("5") {
Timer.invalidate()
}
}
это остановит таймер.
Вы можете изменить его в соответствии с вашими потребностями.
Ответ 3
Как pre 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 секунды