2017-06-17 9 views
2

大量のラベル更新を行う関数を呼び出すループ中にView Controllerを更新しようとしています。しかし、私がループを終えるまで、画面の更新は起こりません。UI表示を強制的に更新する方法を教えてください。

続行する前に強制的にUIを更新する方法はありますか?データを強制的にディスクに書き込むようなもの。

ループを開始するためのボタンのコードは次のようなものです:playSingleBall後

 while (match.currentInnings == currentInnings) 
     { 
      playSingleBall() 
      if (gameover == true) 
      { 
       return 
      } 
     } 

、私は続行する前にUIの更新を強制したいと思います。

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

+1

を、これがメインスレッド上で実行されていることを仮定しますループを終了するまで、UIの更新は実行できません。 UIを更新したい場合は、バックグラウンドスレッドで上記のループを実行してから、UI更新をメインスレッドにディスパッチする必要があります。あるいは、この「while」ループを完全に廃止してください。 – Rob

+0

@LankybritあなたのUIのどの要素をここで更新しようとしていますか?また、ループはしばしばメモリ使用に問題を引き起こすので、私はそれらから離れています。 – Stefan

+0

playSingleBallの内部では、結果を計算してディスプレイ全体を更新します。それは約40のラベルです。 – Lankybrit

答えて

1

は、派遣キューでそれを呼び出します。

スウィフト3.xの

DispatchQueue.main.async { 
    updateYourUI() 
} 

スウィフト2.xの

dispatch_async(dispatch_get_main_queue()) { 
    updateYourUI()  
} 
+1

ありがとうございます。 UpdateUIは何を参照していますか? ViewControllerにUpdateUIはありません。 – Lankybrit

+0

あなたのロジックを追加したり、あなたの機能を作り、UI更新のためにディスパッチメインブロックに呼び出すだけです。アップデートUIは、あなたが望むもの、コード、または機能です。 –

+0

この機能には、ここでUIを更新したい場所の関数を呼び出すというコードの意味があります。 –

関連する問題