0

私の問題には本当に簡単な解決策があるように感じますが、これまでのところほとんど成功していません...最初の.xibファイル(default.pngスプラッシュ画面を早く終了する)をロードして、表示できるようにしますHTMLデータをロードし、xibファイルによって作成されたテキストラベルフィールドを設定する際のアクティビティインジケーター。

残念ながら、以下のコードを実行すると、各Webサイトからすべてのデータが読み込まれるまでdefault.png画像が表示されます...最初にmainViewを表示し、次にアクティビティインジケーターを開始し、 htmlデータ、および私のmainViewでテキストラベルを設定しますか?

@implementation MainViewController
- (void)viewDidLoad {
[super viewDidLoad];

[activityIndicator startAnimating];

[self runTimer];

}

- (void)viewDidAppearBOOL)animated {

[super viewDidAppear:animated];

[self loadHTMLData1];

[self loadHTMLData2];

[self loadHTMLData3];

[self loadHTMLData4];

[activityIndicator stopAnimating];

}
...
4

1 に答える 1

1

iOSがUIを更新する方法と関係があります。電話するとき

[activityIndicator startAnimating];

すぐにアニメーションを開始することを意味するのではなく、次にディスプレイを更新するときにUIにアニメーションを開始するように指示していることを意味します。

この更新はすべてメインスレッドで行われます(スレッドを作成していない場合は、すでにメインスレッドにいます)。したがって、時間がかかる他の処理を行う場合は、表示を更新する前にこれを実行します。

これを修正する方法はいくつかあり、それらはすべて、バックグラウンドで実行される別のスレッドを作成することを含みます。

NSOperation(およびNSOperationQueue )を見てください。これにより、iOSがバックグラウンドで実行する個々のタスクをキューに入れることができます。次に、それらが完了したら、表示を再度更新して、アクティビティインジケーターをオフにすることができます。

グーグル中にNSOperationQueueチュートリアルがあります:)

お役に立てば幸いです。

于 2011-05-02T21:03:27.897 に答える