2016-10-15 5 views
0

おそらく簡単な質問ですが、私は優雅なアプローチを考え出すことはできません。NSTimer/Timerの継続時間とUIの更新

にタイマーがUIを毎秒更新する期間を設定して、タイマーを期間(たとえば1分)に設定できるようにしたいと考えています。

したがって、タイマーが1分に設定されている場合、タイマーは起動し、メソッドを呼び出すごとにUIを更新し、最後に1分後に無効にする必要があります。

私の勘違いはscheduledTimerWithIntervalに設定できます。それはタイマー間隔でメソッドを呼び出します。これを1分にすると、1分後にメソッドを呼び出してタイマーを無効にすることができますが、の場合はの間に呼び出しを実行するメカニズムがないようです。

ガイダンスを教えてもらえますか?

ありがとうございました。

WS

+1

私たちは2つのタイマを使用することができますまたは変数 –

答えて

2

スウィフト3.xのコード

そして、これら二つの機能

// for setup of timer and variable 
func setTimer() { 
    seconds = 1 

    secondTimer?.invalidate() 
    secondTimer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateUI), userInfo: nil, repeats: true) 
} 

//method to update your UI 
func updateUI() { 
    //update your UI here 

    //also update your seconds variable value by 1 
    seconds += 1 
    if seconds == 60 { 
     secondTimer?.invalidate() 
     secondTimer = nil 
    } 
    print(seconds) 
} 
を作る2つのグローバル変数

var seconds = 1 
var secondTimer:Timer? 

を作ります

最終的にあなたが好きな場所setTimer()を呼び出す

+0

ありがとうございます。これは本当にエレガントなものですか?それは非常に無駄に思われます。 – Woodstock

+0

他の解決策は、現在私の心の中で2つのタイマーを取ることですが、変数を持つ単一のタイマーを考えるよりも無駄になると思います。 –

+0

@Woodstock何か改良がありますか? –

3

私はこのような何かをやっているだろう:

1:宣言timerとカウンター:

var timer = Timer() 
var counter = 0 

2:たとえばstartEverySecondのためにと呼ばれる新しい機能を作成します。 1秒間隔でタイマーを開始すると、この関数は60秒後に呼び出され、1分間呼び出されてから無効になります。

func startEverySecond() { 
    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(everySecond), userInfo: nil, repeats: true) 
} 

func everySecond(){ 
    if counter == 60{ 
     timer.invalidate() 
    } 
    counter = counter + 1 
    print("Second") 
} 

3:タイマーの開始と停止をハンドル:

// Start with 60 second interval 
timer = Timer.scheduledTimer(timeInterval: 60, target: self, selector: #selector(startEverySecond), userInfo: nil, repeats: false) 

// Stop 
timer.invalidate() 

だから、基本的に、あなたのタイマーを起動したとき、それは60秒でオフに開始し、これが行われたとき、それは機能startEverySecondと、この意志を呼び出します。 1分ごとにeverySecond関数を毎秒呼び出すようにタイマーを変更してください。単にタイマーを停止するにはtimer.invalidate()

+0

私は投稿したものとあなたのコードで何が新しいですか? –

関連する問題