web-dev-qa-db-ja.com

NSTimerをリセットする方法は? Swiftコード

だから私はタイマーが切れる前に写真に対応するボタンをタップして負けるアプリ/ゲームを作成しています。ボタンをタップするのに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が正直に何であるかさえ私は知りません。

8
LuKenneth

だから私はついにそれを理解しました...

タイマーを初期化して起動するには、別の関数を作成する必要がありました。そして、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)
}
15
LuKenneth