0

drawRect:テーブルビューのスクロールを高速化するために、カスタム テーブル セルにカスタム メソッドを実装する必要がありますが、アプリが Web からダウンロードする必要がある画像があるため、アプリに画像キャッシュを追加したいと考えています。私のアプリの元の実装は、ダウンロード画像メソッドを提供する imageView を実装する SDWebImage ライブラリを使用しています。に画像を追加したい場合drawRect:、Web からの画像のダウンロードを実装してキャッシュする方法を教えてください。

4

1 に答える 1

0

画像をダウンロードしてキャッシュするには、SDWebImage を使用する必要があります。次に、そのダウンロード操作の委任/完了ブロックで、画像をプロパティに割り当て、setNeedsDisplay を呼び出す必要があります。setNeedsDisplay により、ビューが再描画されます。これは mainQueue で呼び出す必要があります。

 [[SDWebImageManager sharedManager] downloadWithURL:[NSURL URLWithString:theArticle.imageURL] options:SDWebImageLowPriority progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) {
       dispatch_async(bakground_queue, ^{
       //Here you probably want to dispatch_async to a background queue to do all the image resizing first before drawing on main queue

           dispatch_async(dispatch_get_main_queue(), ^{
               weakSelf.thumbnailImage = image;
               [weakSelf setNeedsDisplay];
           });
       });
   }];

drawRect では、そのプロパティから描画する必要があります。例えば

[self.image drawInRect:rect]

これは、これを達成する方法の基本原則にすぎません。実際に最適化するには、おそらくさらに多くの作業が必要です (たとえば、不要な場合はダウンロード操作をキャンセルします)。

編集:SDWebImageManagerには、ディスクキャッシュに保存する前に画像のサイズを変更/変換するデリゲートメソッドがあります。上記のようなバックグラウンド キューへの dispatch_async の代わりに、そのメソッドを使用することをお勧めします。

于 2013-11-26T06:03:56.880 に答える