2

iOS アプリの UICollectionView で画像キャッシュに SDWebImage を使用しています。

すべて問題ありませんが、ユーザーがコレクション ビューをすばやくスクロールすると、プレースホルダーがキャッシュされた画像に置き換えられる前に、常にほとんど一時停止します。これはキャッシュチェックによるものだと思います。ユーザーエクスペリエンスを向上させるために、画像が実際にキャッシュされたら、プレースホルダーではなく適切な画像をセルに表示したいと思います。キャッシュされた画像のローカル (デバイス) ファイルシステムのパスを取得してShowインスタンスに保存し、それを (存在する場合) プレースホルダーの代わりに使用できれば、これは簡単です。

成功ブロックをsetImageWithURLメソッドに渡す可能性があります。ただし、取得する唯一の引数はUIImageインスタンスです (実際には master ブランチには cached と呼ばれるBOOL変数も渡さます)。では、 UIImageインスタンスから画像のファイルシステム パスを直接取得する可能性はありますか? または、キャッシュされたインスタンスにその情報を渡すようにSDWebImageを変更する必要がありますか? または、先ほど説明した目標を達成するためのより良い方法はありますか?

私のショークラスにはimageURLがあり、ショーセルがSDWebImageを使用する方法は次のとおりです。

#import "ShowCell.h"
#import <SDWebImage/UIImageView+WebCache.h>

@implementation ShowCell

@synthesize imageView = _imageView;
@synthesize label = _label;
@synthesize show = _show;

- (void)setShow:(Show *)show
{
    if (_show != show) {
        self.label.text = show.title;
        if (show.imageURL) {
            [self.imageView setImageWithURL:[NSURL URLWithString:show.imageURL]
                           placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
        }
        _show = show;
    }
}

@end
4

2 に答える 2

1

同様の問題がありました。次を参照してください:キャッシュ内の画像のプレースホルダーを表示するSDWebImage

基本的に、これを解決するためにプロジェクトをフォークしました。

アップデート:

ちらつきを避けるためにこれを行うことができます(これはプロジェクトのマスターブランチで機能します):

[imageView setImageWithURL:url placeholderImage:imageView.image options:0 
 progress:^(NSUInteger receivedSize, long long expectedSize) {
        imageView.image = [UIImage imageNamed:@"QuestionMarkFace.png"];
 } completed:nil];
于 2013-02-26T20:51:30.823 に答える