2016-04-03 8 views
1

に更新されていない、私はラベルを使用して、表示されたテキストを持っている必要があります。値はユーザーによって提供され、各テキスト変更の間の遅延を決定するために使用されます。ラベルが更新されるたびに、そのテキストが配列の次の項目になります。それがアプリで使用されると、ラベルは数秒後に配列の最後の項目に変わります(遅延時間に配列内の項目の数を掛けた値)。また、アイテムを印刷しますが、数秒後にすべてのアイテムを一度に印刷します(遅延時間にアレイ内のアイテムの数を掛けた値)。では、最後に変更するのではなく、各変更後にラベルを更新する方法はありますか?ラベルのテキストは、関数内で複数回変更されているが、私のアプリでは画面

問題を引き起こしているコード:

@IBAction func startEndTouch(sender: AnyObject) { 

    var wordsPerMinVal:Double = 60.0/sliderValueBen 

    for item in textEnterGo { 
     delay(wordsPerMinVal){ 
      self.yourWordsLabel.text = item 
      print(item) 
     } 
    } 
} 

答えて

0

あなたはイベントループは、UIを更新するために使用される方法、およびどのようにあなたのコードがループにプラグインを理解する必要があります。

あなたのコードが制御を取得すると、画面のレンダリングがあなたのコードがそれを作るために必要なすべての更新を行うようにする停止します。コードが戻ったら、Cocoaはメソッド内で行った変更を分析し、それに応じてビジュアルを更新します。

これはあなたの問題を解決するための鍵を提供します。あなたの方法はforループを含めて、終わるまでココアは、すべての変更を見ることができません。そのため、最後の更新のみが表示され、中間の更新は気付かれません。むしろ、ループを使用するよりも、メンバ変数にその状態を保つ方法を作る:あなたは再考えるアプローチする必要があり、この問題を解決するために

。そのメソッドをイベントハンドラから呼び出し、最初の表示の状態を設定し、最初の項目を表示し、wordsPerMinValで目を覚まし、復帰するようにタイマーを設定します。これにより、イベントループによって変更がレンダリングされます。タイマーがあなたに電話をかけたら、ビジュアルを変更し、必要に応じてタイマーをもう一度設定して、もう一度戻る。更新を完了するまで続行します。

関連する問題