5

メインスレッドが長い操作をしている間に、アニメーションの糸車を表示する方法はありますか? アニメーションは、UIActivityIndi​​catorView を作成したのと同じスレッドによって処理されますよね? その場合、複数のスレッドに属するビューを同じビュー階層に配置できますか?

他のすべてが失敗した場合、長い操作自体をバックグラウンド スレッドに移動してもかまいませんが、実行中に何らかの方法で UI をフリーズする必要があります。どうすればいいのかわからない。

編集:「長い」は、第 1 世代のデバイスでは約 2 秒です。

4

2 に答える 2

9

解決策は、時間のかかる操作を実行する前に、実行ループを介して少なくとも 1 回の反復でアニメーションを開始することです。例えば:

[activity startAnimating];
[self performSelector:@selector(lengthyOperation) withObject:nil afterDelay:0];

メソッドを使用する必要はありません。メソッドを後でperformSelector実行するように設定する方法があるだけで、忙しくなる前にアクティビティ インジケーターがアニメーション化を開始する可能性があります。

于 2010-03-06T04:26:03.667 に答える
6

正しい答えは、時間のかかる操作をバックグラウンド スレッドに移動し、完了時にメイン スレッドと通信させることです。これを行う方法がわからない場合は、 と を読んでNSOperationQueueくださいNSInvocationOperation。アプリとユーザーは、学習にかかる時間が最小限であることを感謝するでしょう。

于 2010-03-06T04:28:50.077 に答える