2

質問のタイトルでごめんなさい。適切なタイトルが見つかりません。

UITableViewビューを開いたときにURLのコンテンツ画像がありUITableViewますが、画像が読み込まれるまでビューが表示されませんでした。これには時間がかかります。

phpによってJSONから画像を取得します。

表を表示してから、画像の読み込みプロセスを表示したいと思います。

これは私のアプリからのコードです:

NSDictionary *info = [json objectAtIndex:indexPath.row];
cell.lbl.text = [info objectForKey:@"title"];
NSString *imageUrl = [info objectForKey:@"image"];
cell.img.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrl]]];
[cell.img.layer setBorderColor: [[UIColor blackColor] CGColor]];
[cell.img.layer setBorderWidth: 1.0];

return cell;

申し訳ありませんが私の英語は弱いです。

4

4 に答える 4

7

UI をブロックしないように、別のスレッドで Web 要求を実行します。を使った例NSOperationです。に示すように、メイン スレッドでのみ UI を更新することを忘れないでくださいperformSelectorOnMainThread:

- (void)loadImage:(NSURL *)imageURL
{
    NSOperationQueue *queue = [NSOperationQueue new];
    NSInvocationOperation *operation = [[NSInvocationOperation alloc]
                                        initWithTarget:self
                                        selector:@selector(requestRemoteImage:)
                                        object:imageURL];
    [queue addOperation:operation];
}

- (void)requestRemoteImage:(NSURL *)imageURL
{
    NSData *imageData = [[NSData alloc] initWithContentsOfURL:imageURL];
    UIImage *image = [[UIImage alloc] initWithData:imageData];

    [self performSelectorOnMainThread:@selector(placeImageInUI:) withObject:image waitUntilDone:YES];
}

- (void)placeImageInUI:(UIImage *)image
{
    [_image setImage:image];
}
于 2012-08-27T12:52:05.387 に答える
2

と を使用する必要がNSURLConnectionありNSURLRequestます。まず、空のテーブル ビューを作成して表示します (おそらく、アプリにローカルに保存されているプレースホルダー イメージを使用します)。次に、リクエストの送信を開始します。これらのリクエストはバックグラウンドで実行され、リクエストが完了するとあなた (代理人) に通知されます。その後、ユーザーに画像を表示できます。多数の画像がある場合は、一度にすべての画像を読み込まないようにしてください。また、ユーザーに見えないものは読み込まず、下にスクロールした場合にのみ読み込みます。

于 2012-08-27T10:59:16.013 に答える
1

UITableView lazy image loadingApple が提供した例があります: https://developer.apple.com/library/ios/#samplecode/LazyTableImages/Introduction/Intro.html

うまくいけば、それはあなたが探していたものです

于 2012-08-27T12:45:59.533 に答える
0

これは、アプリケーションで行う非常に一般的なことの1つです。

URLを配列やdbなどの永続ストアに保存するだけで、操作キューを使用して画像を取得し、ダウンロードを高速化できます。優先順位を設定したり、いつでも操作をキャンセルしたりできます。また、アプリケーションの応答時間が速くなります。

于 2012-08-27T11:54:26.447 に答える