2009-09-01 19 views
3

私はtableViewを持っていて、ユーザーがセルの1つを選択しているときに大きな画像をロードしています。didSelectRowAtIndexPathはビューを表示しません

この読み込みには10秒かかりますが、スピンしているアイコンで小さな表示をしたいのですが。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    loadingView = [[LoadingHUDView alloc] initWithTitle: NSLocalizedString(@"Loading image",@"")]; 
    [self.view addSubview:loadingView]; 
    [loadingView startAnimating]; 
    loadingView.center = CGPointMake(self.view.bounds.size.width/2, 150); 
    [imageView loadImage: path]; 
    [loadingView removeFromSuperview]; 
} 

問題はビュー(loadingView)が表示されないことです。これは、loadImageを呼び出すと表示されないようです。そのビューを強制的に表示することはできますか?

答えて

2

問題は、イメージの読み込みがスレッドを結び付けているため、ビューが回転アイコンで更新されないということです。

別のスレッドを使用する必要がありますが、バックグラウンドスレッドから簡単にビューを更新できないため、複雑になります。

実際に行う必要があるのは、大きな画像の読み込みをバックグラウンドスレッドで開始することです。

別の方法に大きな画像をロードするためのコードを入れて、その後、次のようにバックグラウンドスレッド上で、それを実行します。

[self performSelectorInBackground:(@selector(loadBigImage)) withObject:nil]; 

あなた-loadBigImageメソッド内で使用すると、NSAutoreleaseプールを宣言する必要がありますことを忘れないでください:

-(void)loadBigImage { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    //Code to load big image up 
    [pool drain]; 
} 

これをバックグラウンドで実行すると、アニメーションの読み込みアイコンがうまく表示されます。

希望があれば

+0

チャームのように働いた!ありがとうございました!! – Jorge

+0

問題はありません。また、StackOverflowへようこそ! – h4xxr

関連する問題