2012-12-25 9 views
11

私はiOSアプリケーションでSDWebImage(ver3.0)を使用していましたが、Path2.0、Pinterest、Viddy.Thanksのように読み込んだuitableviewcellの新しいイメージをフェードインしたいiOS SDWebImage fade in new image、フェードイン自体が機能しています。 ただし、テーブルビューをスクロールするときに、セル内の画像が再度読み込まれます。 これは、セルの再利用によって発生する可能性があります。iOS SDWebImageがUITableViewCellでフェードアップ

ここに私のコードです。

[cell.userImageView setImageWithURL:url 
        placeholderImage:placeholderImage 
          completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) { 
           if (!error) { 
            cell.userImageView.alpha = 0.0; 
            [UIView transitionWithView:cell.userImageView 
                duration:1.0 
                options:UIViewAnimationOptionTransitionCrossDissolve 
                animations:^{ 
                 [cell.userImageView setImage:image]; 
                 cell.userImageView.alpha = 1.0; 
                } completion:NULL]; 
           } 
          }]; 
+0

SDWebImageがキャッシュしているかどうかを調べてください。キャッシュされている場合は、キャッシュされていないロードのみをアニメーション化してください。 – Till

+0

ありがとう!キャッシュが行われます。しかし、私はキャッシュされていないロードだけをアニメートするかどうかチェックしませんでした。 – tsk

答えて

25

クレジットは正解だけで画像がネットワーク(キャッシュされない)から検索され、その場合、アニメーションを実行したかどうかを確認することであることを指摘し@OzBozに行く:

[cell.userImageView setImageWithURL:url 
        placeholderImage:placeholderImage 
          completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) { 
           if (image && cacheType == SDImageCacheTypeNone) 
           { 
            cell.userImageView.alpha = 0.0; 
            [UIView animateWithDuration:1.0 
                animations:^{ 
                 cell.userImageView.alpha = 1.0; 
                }]; 
           } 
          }]; 

あなたは)セルはもはや見えて心配ならば、あなたも使用することができます。

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 

この方法は、(同様の名前UITableViewDataSource方法で混同しない)を返します行がまだ表示されている場合は、nilこれはほとんどのUITableViewCell非同期イメージ検索プロセスでは非常に重要ですが、setImageWithURLは以前のイメージ検索プロセスをキャンセルするので、SDImageWebを使用するときはこれをチェックすることはあまり重要ではありません。

+0

ありがとう!!あなたのコードはうまくいきます(私はUITableViewCell型をカスタムセルサブクラスに置き換えました)!!非同期にセルを更新すると、セルがまだ表示されているかどうかを確認する必要があるかどうかはわかりませんでした。だから、私はたくさんのことを学びました。 – tsk

+0

@Rob私はちょうど興味がある、私は(cacheType == SDImageCacheTypeNone)代わりにUITableView * cell = [tableView cellForRowAtIndexPath:indexPath]; httpからデータをロードした後に(セル)がアニメーションを表示していた場合。あなたのifステートメントを使った後、私は以前にキャッシュされたセル内の画像がゼロである理由を理解できませんでした。 – OzBoz

+0

@Rob答えに感謝します。しかし、まだ何かが明確ではありません。 'cacheType == SDImageCacheTypeNone'を使用してデータがWebから取得されたかどうかを確認し、その後アニメーションを作成するロジック。そうでない場合は、キャッシュされたイメージが(instagram appのような)アニメーションなしで直ちに表示されるはずです。私が理解できなかったのは、イメージビューへの設定イメージがプリロードされていると、セルが無限になる理由(別の行で再利用)です。 2行目の画像のリンクを変更すると、セルは非ゼロになります。なぜこれはそうですか? – OzBoz

関連する問題