11

私は iOS アプリで SDWebImage(ver3.0) を使用しており、Path2.0、Pinterest、および Viddy のように読み込まれたら、uitableviewcell の新しいイメージをフェード インしたいと考えています。 -in自体は機能しています。ただし、テーブルビューをスクロールすると、セル内の画像が再度読み込まれます。これは、セルの再利用が原因である可能性があります。

これが私のコードです。

[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];
                              }
                          }];
4

1 に答える 1

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) は non- を返します。nilこれは、ほとんどの非同期画像取得プロセスで実行することが非常に重要ですが、以前の画像取得プロセスがキャンセルUITableViewCellされることが判明したため、 を使用するときにこれを確認することはあまり重要ではありません。setImageWithURLSDImageWeb

于 2012-12-25T18:16:17.917 に答える