2

長いリソースの読み込みプロセス中に UIView にある UIProgressView プログレス バーを更新しようとしています。NIB ファイルから大量のビットマップをロードしているとしましょう (おそらく 100 のように)。10 をロードした後、既に表示されている UIView の一部である UIProgressView に .progress を発行します。だから、私は発行します:

myView.myProgressView.progress=0.2;

次に、別の 10 個のビットマップを読み込み、次を発行します。

myView.myProgressView.progress=0.4;

などなど。アプリを実行すると、進行状況バーが進みません。最初の位置にとどまるだけです。完全なバカのように聞こえるかもしれませんが、OS が UI を更新できるように、リソースを別のスレッドにロードする必要がありますか?それとも、もっと簡単な方法がありますか? ご協力ありがとうございます。

4

2 に答える 2

1

はい。それらを別のスレッドにロードします。または、次のようなものを使用してperformSelectorください:

[self performSelector:@selector(setProgressBar) withObject:nil afterDelay:0.0];

(そしてsetProgressBar、メンバー変数から現在の値を読み取り、UI を更新する関数を作成します)

于 2009-08-07T02:44:24.853 に答える
0

UIを更新するたびに、runloopのステップを実行できます。

SInt32 result;
do {
    result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, TRUE);
} while(result == kCFRunLoopRunHandledSource);

他の悪い結果をもたらす可能性があります(たとえば、ユーザーがUIを操作できるようにしたり、実行するviewDidAppear前などにView Controllerのデリゲートを実行したりできるようにするなど)ので、非常に注意してください。

于 2011-05-14T18:00:17.247 に答える