Gewusst wie: zurücksetzen von NSTimer? swift-code
So, ich bin momentan dabei eine app/Spiel, wo Sie Tippen auf die entsprechende Taste, um ein Bild, bevor die Zeit abläuft und Sie verlieren. Sie erhalten 1 Sekunde, um Tippen Sie auf die Schaltfläche, und wählen Sie die rechts-Taste, dann wird der timer zurückgesetzt und ein neues Bild kommt. Ich habe Probleme beim zurücksetzen des Timers. Es feuert nach einer Sekunde, auch nachdem ich versuchen, es zurücksetzen. Hier ist der code:
loadPicture() läuft 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()
}
}
und hier ist der resetTimer () - Methode:
func resetTimer(){
timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("gameOverTimer"), userInfo: nil, repeats: false)
}
Denke ich, kann es etwas damit zu tun haben NSRunloops? Ich bin mir nicht sicher. Ich weiß gar nicht, was für ein NSRunloop ist um ehrlich zu sein.
- Ich bin nicht sicher, warum Sie Ihre timer wird ausgelöst, nachdem Sie es ungültig ist, aber Sie haben einen Fehler in der Rekursion, der überprüft, ob Duplikate - Sie überschreiben
randomInt
so dass auf der rekursive AufrufloadPicture
Sie effektiv überprüfen, ob diese zufällige Zahl ist die gleiche wie die Vorherige Zufallszahl, nicht, ob diese zufällige Zahl ist die gleiche wie das Vorherige Bild angezeigt wurde - in loadPicture() vor resetTimer() Zeile schreiben timer = null . . .
- Nur stellen Sie sicher, Sie sind die Schaffung der timer im selben thread? zweitens haben Sie versucht, die Erhöhung der Zeit, um in sagen wir 5 Sekunden?
- Paulw11, gibt Es keine Fehler. Die randomInt ist der index des Bildes in das array. Wenn die int ist das gleiche, das Bild ist das gleiche zu.
- iHart, das hat nicht funktioniert 🙁
- nshebbar, ja und ja
Du musst angemeldet sein, um einen Kommentar abzugeben.
Also ich fand es schließlich heraus...
Ich musste eine eigene Funktion, um den timer zu starten, indem initialisieren.
Und in der resetTimer () - Funktion habe ich den timer.invalidate () - line. Also mein code sieht wie folgt aus:
BEARBEITEN
Mit dem neuen Selektor-syntax sieht das so aus:
NSTimer.scheduledTimerWithTimeInterval
geben mir wieder eine neue Instanz von NSTimer, richtig ? Gibt es irgendeine Möglichkeit, nur den Timer zurückzusetzen, wie die gleichen Timer-Instanz ?