1

アプリの処理で進行中のアクティビティを反映するためにプログレス バーやその他のプログレス インジケーターをリアルタイムで更新する場合、次の巧妙なコード スニペットを使用せずにこれを行う方法はないと思います。

[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantPast]];

それ以外の場合、進行状況バーは実行ループが終了するまで待機し、終了すると進行状況バーの結論にジャンプします。

単一の実行ループ (または単一の実行ループであると私が認識しているもの) 中に進行状況を更新したい場合、これが唯一の方法ですか?

プログレス バーは通常、リアルタイムで更新されるようにどのようにコーディングされていますか?

上記のコードは危険ですか? 実行ループを直接操作することについてはあまりよく知らないので、アプリでわからないことをすると緊張します。このコードは機能しますが、良い考えですか?

4

2 に答える 2

3

バックグラウンド スレッド/NSOperationQueue/GCD で時間のかかる操作を実行し、UI を定期的に更新します。UI は常にメイン スレッドで実行されるため、更新はすぐに反映されます。次のようなことを試してください:

for (...) {
  // some process
  // ...

  dispatch_async(dispatch_get_main_queue(),^ {
    [self.progressIndicator setProgress:x animated:YES];
  });
}

一般に、UI 全体をブロックするため、メイン スレッドで長い操作や複雑な操作を実行することは望ましくありません。

于 2012-04-30T14:47:23.127 に答える
1

私はNSTimerこの種のニーズに使用しています。オーディオファイルを再生/ストリーミングしようとしていて、進行状況バーの位置で期間を表示する必要があるとしましょう。これが私のやり方です。

お役に立てれば..

于 2012-04-30T20:59:46.617 に答える