2017-03-12 6 views
0

自己再現タイマーで1〜2秒の遅延を作成しようとしています。これは私がタイマーを作成する方法です:スウィフトでタイマースレッドをスリープさせるか、遅らせる

currentThread = Timer.scheduledTimer(timeInterval: 0.001, target: self, selector: #selector(Movement.updatePosition), userInfo: nil, repeats: true) 

したがって、タイマは常にupdatePosition()メソッドを実行します。

if distance <= respawnDistance * 0.1 { 
    // Delay timer for 1 second  
} 

そして私は、私はこれを行うことができると考えていた:しかし、私はタイマーが数秒間遅れることがしたい、そのメソッド内のif文持つ

currentThread.invalidate() 

をと1秒後に実行される別のタイマーを作成するだけで、前のタイマーの再起動につながります。しかし、現在のTimerをスリープ状態にする方法があれば、効率が悪いと思いますか?

+0

無限ループを使用してupdatePositionメソッドを呼び出し、その中に1秒のタイマーがありますか?これは最も効率的な方法ではないかもしれません... – Munib

+0

私は 'updatePosition'が何をするのか疑問に思っています。これが何らかのアニメーションの場合は、タイマーではなくアニメーションを使用します。 – matt

+0

必要なものはすべてbool変数です。 –

答えて

0

NSTimerは正確ではありません。最大分解能は50〜100ms程度です。タイマーの起動を制御するために変数を追加することはできます:

var doNotUpdate = false 

if distance <= respawnDistance * 0.1 { 
    doNotUpdate = true 
    DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { 
     doNotUpdate = false 
    } 
} 

func updatePosition() { 
    if doNotUpdate { return } 

    // update your position 
} 
+0

私はまた、タイマーが正確ではないことに気付きました。ありがとう – Pablo

関連する問題