2017-08-15 21 views
0

タイマーを開始するために1つのボタンによってトリガーされるタイマーを作りたい。タイマーが実行されているとき、私はタイマーを一時停止する同じボタンが必要です。開始/一時停止トグルボタンでタイマーが始まらない

私は主にボタンのラベルのIBAction以内にこの動作を扱う:

@IBAction func btn_start(_ sender: Any) {   
    if timerIsRunning == false {   
     timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(runTimer), userInfo: nil, repeats: true)    
     timerIsRunning = true      
    } 

    if timerIsRunning == true {    
     timer.invalidate()    
     timerIsRunning = false    
    }   
} 
私はタイマーが高速化されたように、私はスタートボタンを数回をトリガーすることができ、タイマーもseveralt回トリガされたことを認識

最後にこの動作を防止するために 私はtimerIsRunning導入:タイマーはもう起動しないことを、予想外の結果とブール値を: - これはタイマーによってトリガーされた私のタイマー機能である/

func runTimer() {   
    if timeInSeconds >= 0 {   
     timeInSeconds = timeInSeconds - 1    
     updateTimerLabel()    
    }   
} 

ことができます誰もこれを説明する?私に救いの手を差し伸べる?

+0

'timerIsRunning =はtrue。もしtimerIsRunning == true'ならばね。 – matt

+0

@mattどういう意味ですか?説明できますか? – boehmatron

+0

彼は私が基本的に私の答えで書いたことを意味し、あなたは変数を 'true'に設定し、次のステートメントではその値をtrueとチェックします。 – luk2302

答えて

3

タイマーを開始した後にreturnを入力するか、elseを使用してください。そうでなければ、常にinvalidateあなたの方法における第二ifブロックで瞬時に新しく作成されたタイマー:

@IBAction func btn_start(_ sender: Any) {   
    if !timerIsRunning {   
     timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(runTimer), userInfo: nil, repeats: true)    
     timerIsRunning = true      
    } else {    
     timer.invalidate()    
     timerIsRunning = false    
    }   
} 
関連する問題