1

UI Collection View を使用して、画像とそれに関連するデータ (日付、名前など) を含むセルを垂直スクロール形式で表示しています。ビューが表示されると、画像データがサーバーから取得されます。フェッチされたデータは、セルが表示されるときに UIImage に変換されます。

問題は、スクロールが遅いことです。新しいセルが表示されるたびに、スクロールが少し停止します。この問題を解決する方法はありますか? 遅延を防ぐために、バックグラウンド スレッドで NSData から UIImage への変換を開始することを考えていました。それが正しい方法かどうかはわかりません。

4

1 に答える 1

1

スタックが言うように、画像を非同期でロードする必要があります。UIImageViewこれを非常に簡単にする素晴らしいカテゴリがあります。つまり、SDWebImageまたはAFNetworkingのカテゴリです。これらのUIImageViewカテゴリは、画像を非同期的にロードするだけでなく、キャッシュを実行したり、必要に応じてネットワーク操作をキャンセルしたりします。これを自分で適切に行うと (今列挙したすべての機能をキャプチャするため)、多くのコードが必要になりますが、これらのカテゴリのいずれかを使用します。

たとえば、SDWebImage を使用する場合、次のことができます。

#import "UIImageView+WebCache.h"

その後:

[cell.imageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeholder.png"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {
    if (error)
        NSLog(@"%s: setImageWithURL error: %@", __FUNCTION__, error);
}];

または、AFNetworking を使用している場合:

#import "UIImageView+AFNetworking.h"

[cell.imageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

また

[cell.imageView setImageWithURLRequest:[NSURLRequest requestWithURL:url] placeholderImage:[UIImage imageNamed:@"placeholder.png"] success:nil failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
    NSLog(@"%s: setImageWithURLRequest error: %@", __FUNCTION__, error);
}];
于 2013-07-04T02:04:26.280 に答える