だから私はタイマーが切れる前に写真に対応するボタンをタップして負けるアプリ/ゲームを作成しています。ボタンをタップするのに1秒かかります。右のボタンを選択すると、タイマーがリセットされ、新しい画像が表示されます。タイマーのリセットに問題があります。リセットしようとしても1秒後に発火します。コードは次のとおりです。
loadPicture()は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()
}
}
これがresetTimer()メソッドです。
func resetTimer(){
timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("gameOverTimer"), userInfo: nil, repeats: false)
}
NSRunloopsと関係があるのではないかと思いますか?よく分かりません。 NSRunloopが正直に何であるかさえ私は知りません。
だから私はついにそれを理解しました...
タイマーを初期化して起動するには、別の関数を作成する必要がありました。そして、resetTimer()関数にtimer.invalidate()行を追加しました。したがって、私のコードは次のようになります。
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()
}
[〜#〜]編集[〜#〜]
新しいセレクター構文では、次のようになります。
func startTimer(){
timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(NameOfClass.startTimer), userInfo: "timer", repeats: true)
}