0

UITableViewのURLから画像を読み込んでいます。ただし、ビューをロードするときは非常に遅くなります。これが例です、

UIImage *image = nil;
image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://calcuttans.com/palki/wp-content/uploads/2009/02/kidscover-small.png"]]];

テーブルビューで、UIButtonは背景画像を設定しています。

サンプルを提供していただけますか。

参考:LazzyTableサンプルプログラムを使用しましたが、あまり役に立ちません。他のサンプルを提案できますか。

4

9 に答える 9

17

画像を非同期で読み込む

NSURL* url = [NSURL URLWithString:@"http://calcuttans.com/palki/wp-content/uploads/2009/02/kidscover-small.png"];
    NSURLRequest* request = [NSURLRequest requestWithURL:url];


[NSURLConnection sendAsynchronousRequest:request
        queue:[NSOperationQueue mainQueue]
        completionHandler:^(NSURLResponse * response,
            NSData * data,
            NSError * error) {
    if (!error){
            NSImage* image = [[NSImage alloc] initWithData:data];
        // do whatever you want with image
    }

}];
于 2013-01-29T09:10:01.323 に答える
3

これに利用できるオープン ソース ライブラリがいくつかあります。

  1. HJキャッシュ
  2. SDWebImage

これらのライブラリは、画像を非同期的にダウンロードし、後で使用できるようにキャッシュします。

于 2013-01-29T09:13:43.600 に答える
2

AFNetworkingを実装してみてください。非同期リクエストを使用して画像をダウンロードします。現在、ダウンロードごとにビューをブロックしています。

その後、 AFImageRequestOperationを使用して画像をダウンロードできます。

于 2013-01-29T09:07:57.827 に答える
2

//データ処理を高速化するためにディスパッチ キューを使用します。これをviewDidLoadに追加

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
    NSData * data=[NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrl]];
    [self performSelectorOnMainThread:@selector(setImage:) withObject:data waitUntilDone:YES];
});

//データが取得されたら、画像を設定してテーブルビューをリロードします

-(void)setImage:(NSData *)responseData
{
image = [UIImage imageWithData:responseData];
[tableView reloadData];
}
于 2013-01-29T09:09:26.680 に答える
2

毎回インターネットからダウンロードするすべての画像をロードすると、非常に遅くなるはずです。

ダウンロードイメージを filePath に存在させる必要があると思います。イメージをロードするときに、イメージが以前にダウンロードされたかどうかを確認し、そうでない場合はダウンロードします。ダウンロードされている場合は、imageWithContentsOfFile:メソッドを使用して画像をロードできます

于 2013-01-29T09:11:29.490 に答える
1

おそらく、asihttprequestを使用して画像を遅延読み込みできます。ASINetworkQueues を使用する

于 2013-01-29T09:08:59.693 に答える
1

効率的にするために使用NSOperationQueueする必要がありますtableview

このicodeblog チュートリアルraywenderlichチュートリアルを確認してください

于 2013-01-29T09:09:01.560 に答える
1

このチュートリアルを見てください。とても助かりました。私がそれを使用していたとき、私は一般的にiOSにまったく慣れていなかったので、ウェブからの画像のロードに関してだけでなく、役に立ちました.

http://www.markj.net/iphone-asynchronous-table-image/

于 2013-01-29T09:11:28.780 に答える
0

それはよりAFNetworking簡単です。

//AFネットワーキング

#import "UIImageView+AFNetworking.h"

[cell.iboImageView setImageWithURL:[NSURL URLWithString:server.imagen] placeholderImage:[UIImage imageNamed:@"qhacer_logo.png"]];
于 2015-01-08T00:22:47.043 に答える