2010-12-01 13 views
0

一部の画像をダウンロードするよう依頼していますが、サブビューを置き換えたいと思います。 これは、UIがブロックされ、新しいビューが後で表示されることを意味します。iOS4 networkActivityIndi​​catorVisibleがUIでブロックされました

ダウンロードのためにブロックが発生したことをユーザーに理解してもらいたいと思います。

まず私は私の要求は、UIスレッドをブロックしていることから、アクティビティインジケータの点滅(ほとんど何も)maxiumにつながること

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
[self downloadFunction]; 
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 

を使用しようとしました。

コントローラにプッシュする前にダウンロードしたデータに依存しているため、downloadFunctionをバックグラウンドに置くことはできません(「同じビューコントローラのインスタンスを2回以上押すことはサポートされていません」ボタンを2回以上クリックする可能性があります)。

[self performSelectorInBackground:@selector(showActivitySubView) withObject:nil]; 
or 
[NSThread detachNewThreadSelector: @selector(showActivitySubView) toTarget:self withObject:nil]; 

まだUIがブロックされ、ダウンロードが完了した後、私のインジケータがちょうど表示されている...

は、それから私は、ビューの上に糸車でサブビューを入れてみました

アイデア?

答えて

1

単純にメソッドを2つに分割し、メインスレッドをブロックする前にUIリフレッシュスレッドを有効にするためにタイムドコールを使用することができます。たとえば、次のように

- (void) doActualWork { 
    [self downloadFunction]; 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
} 

- (void) doWork { 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
    [self performSelector:@selector(doActualWork) withObject:Nil afterDelay:0.05]; 
} 

あり、これを行うための、おそらくより良い方法だ、と私はタスクバー上の小さなインジケーターが幸せなアプリのレビューの人々を維持するのに十分な活動指標になるとわからないんだけど、これは動作するはずですスレッディングは必要ありません。

+0

ありがとうございます!それは私のために働いて...ネットワーク活動を示すために、私はdoActualWorkが始まる前に実行されるビューにUIActivityIndi​​catorViewを持つ別のサブビューを追加して、ダウンロードがUIをブロックするので、誰も気にする必要はありませんボタンを2回押す:-) –

関連する問題