2017-05-05 18 views
0

タイマーのタイマーはどのように機能しましたか?Swift 3タイマーのタイマー

func startSequenz() 
{ 
    for mainCell in mainTable { 
     timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector:#selector(ViewController.run), userInfo: nil, repeats: true) 
    } 
} 

func run() 
{ 
    for cell in table{ 
     timer2 = Timer.scheduledTimer(timeInterval: 1, target: self, selector:#selector(ViewController.run2), userInfo: nil, repeats: true) 
    } 
    timer!.invalidate() 
} 

func run2() 
{ 
    currentSteps! += 1 
    print("\(currentSteps!)") 
    timer2!.invalidate() 
} 

func run2()が実行されることはありません。私の目標はrun2の実行を遅らせることで、sleep(1) GUIをフリーズすることです。

更新日:

私はTom E answerを使用していますが、部分的に機能しました。しかし、GUIは、実行の最後に1回しかリフレッシュしません。

​​
+0

基本的には動作しますが、**多くの**セルに対しては**同じ**のタイマーを使用していますが、これは動作しません。 – vadian

+0

私はすべてのループが新しいインスタンスを作成するのを見ています。どうすれば解決できるの?私はちょうど解決策を今得られない。 – ZombieIK

答えて

1

アクションメソッドが初めて呼び出されたときに直ちに無効になるリピートタイマーを作成することは意味がないようです。

コードの実行を遅延させる適切な方法をお探しの場合は、Grand Central Dispatchをご覧ください。

DispatchQueue.global().asyncAfter(deadline: .now() + .seconds(1)) { 
    // This code will be placed on a background queue and be executed a second later 

    DispatchQueue.main.async { 
     // Here you may update any GUI elements 
    } 
} 

バックグラウンドキューからGUI要素にアクセスしないように注意してください。このため、このサンプルでは、​​GUIの更新のためにメインスレッドに切り替える方法を示しています。