8

現在ビューコントローラに移動しているボタンがあり、IBActionに接続されています。

IBActionで、通常どおり[self.view addSubView]を使用してUIActivityIndi​​catorViewを作成し、いくつかの画像をロードします。

インジケータービュー、ビューコントローラー、ウィンドウでsetNeedsDisplayを試しましたが、インジケーターを表示する前に画像が読み込まれます。もちろん、これはまったく役に立ちません。

だから私は、インスタント再描画を強制する方法(私がそれについてもう少し考えたときにうまくいかない可能性が高い)、またはインジケーターが表示された後に画像をロードする方法、または起動する方法を探しています別のスレッドなどを使用して、インジケーターのアニメーション化/表示を開始するか、別のビューコントローラーにインジケーターを配置し、画像の読み込みに進む前に、何らかの方法でインジケーターを強制的に追加/表示します。

推奨事項?

4

1 に答える 1

18

この状況で私が行うことは、新しいスレッドを生成することです。これにより、メインスレッドが解放され、バックグラウンドでの読み込み中にUIインタラクションを処理できるようになります。

最初にを表示しUIActivityIndicatorView、次に画像をロードする新しいスレッドを生成し、次に新しいスレッドで実行されるメソッドの最後の行で、を非表示にしUIActivityIndicatorViewます。

次に例を示します。

//do stuff...
[activityIndicatorView startAnimating];
[NSThread detachNewThreadSelector:@selector(loadImages) toTarget:self withObject:nil];

あなたのloadImages方法では:

- (void) loadImages {
   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
   //load images...
   [activityIndicatorView performSelectorOnMainThread:@selector(stopAnimating)];
   [pool drain];
}
于 2010-11-04T15:02:12.033 に答える