2009-08-07 14 views
2

長いリソース読み込みプロセス中にUIViewにあるUIProgressViewプログレスバーを更新しようとしています。 NIBファイル(おそらく100など)からビットマップの束を読み込んでいるとしましょう。私が10をロードした後、すでに表示されているUIViewの一部であるUIProgressViewに.progressを発行します。だから、私が発行します。アプリを実行すると、プログレスバーが進まない私のアプリケーションがリソースを読み込んでいる間にUIProgressViewが更新されない

myView.myProgressView.progress=0.4; 

などなど:

myView.myProgressView.progress=0.2; 

をその後、私は別の10ビットマップ、および問題をロードします。それは単に最初の位置に留まります。 OSがUIを更新できるように、別のスレッドに自分のリソースをロードする必要がありますか、それとも簡単な方法ですか?ご協力いただきありがとうございます。

答えて

1

はい。それらを別のスレッドにロードします。あなたはそれぞれの更新後に実行ループのステップを実行することができ

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

(とメンバ変数から現在の値を読み取り、UIを更新しsetProgressBar関数を作成)

+0

こんにちは、Marcc、 あなたのperformSelectorアプローチを無駄にしようとしました。私の他のすべてのコードが完了した後、setProgressBarメソッドが呼び出されました。私はUIProgressViewを更新しようとしなかった。私は単にNSLogをsetProgressBarに入れ、他のすべてのリソース読み込みメソッドの後にコンソールに出力しました。その他の提案はありますか?あなたは別のスレッドでこのようなことをやっているのかもしれないと私は参照することができますか? – kspeacock

+1

だからアイデアは正しいです、あなたは1つのスレッドでデータを更新し、メインスレッド(UIスレッド)をブロックしないでください。私はあなたが実際にperformSelectorOnMainThreadを使用する必要があると思います。このアプローチを取る場合(開発者サイトでこのドキュメントのドキュメントを検索してください)。 – marcc

0

:それともperformSelectorのようなものを使用UI:それは他の悪い結果を(例えば、UIと対話することを可能に、彼らが実行されなければならない前に、このようなviewDidAppearとしてビューコントローラのデリゲートを実行するなど)可能性があり

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

ので、非常に、Vもエリーは慎重。

関連する問題