How to reset NSTimer? swift code
So I finally figured it out...
I had to make a separate function to start the timer by initializing it. And in the resetTimer() function I added the timer.invalidate() line. So my code looks like this:
func loadPicture() {
//check if repeat picture
secondInt = randomInt
randomInt = Int(arc4random_uniform(24))
if secondInt != randomInt {
pictureName = String(self.PicList[randomInt])
image = UIImage(named: pictureName)
self.picture.image = image
resetTimer()
}
else{
loadPicture()
}
}
func startTimer(){
timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("gameOverTimer"), userInfo: "timer", repeats: true)
}
func resetTimer(){
timer.invalidate()
startTimer()
}
EDIT
With the new selector syntax it looks like this:
func startTimer(){
timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(NameOfClass.startTimer), userInfo: "timer", repeats: true)
}
LuKenneth
Updated on July 24, 2022Comments
-
LuKenneth almost 2 years
So I'm creating an app/game where you tap a button corresponding to a picture before the timer runs out and you lose. You get 1 second to tap the button, and if you choose the right button then the timer resets and a new picture comes up. I'm having trouble reseting the timer. It fires after one second even after I attempt to reset it. Here's the code:
loadPicture() runs off viewDidLoad()
func loadPicture() { //check if repeat picture secondInt = randomInt randomInt = Int(arc4random_uniform(24)) if secondInt != randomInt { pictureName = String(self.PicList[randomInt]) image = UIImage(named: pictureName) self.picture.image = image timer.invalidate() resetTimer() } else{ loadPicture() } }
and here's the resetTimer() method:
func resetTimer(){ timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("gameOverTimer"), userInfo: nil, repeats: false) }
I think it may have something to do with NSRunloops? I'm not sure. I don't even know what a NSRunloop is to be honest.
-
Que20 over 7 years
NSTimer.scheduledTimerWithTimeInterval
will give me back a new instance of NSTimer, right ? Is there any way to just reset the Timer, like, the same Timer instance ? -
LuKenneth over 7 yearsno, i don't believe so. You can invalidate it, but if you do that you cannot start it back up again. @Que20