2012-12-25 55 views
11

我一直在iOS應用程序上使用SDWebImage(ver3.0),並且一旦它加載爲Path2.0,Pinterest和Viddy.Thanks,我想淡入Uitableviewcell的新圖像iOS SDWebImage fade in new image,淡入本身正在工作。 但是,滾動tableview時,再次加載單元格中的圖像。 這可能是由於重複使用單元造成的。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我只是好奇,我使用if(cacheType == SDImageCacheTypeNone)而不是UITableView * cell = [tableView cellForRowAtIndexPath:indexPath]; if(cell)一次從http加載數據後顯示動畫。在我使用if語句後,我無法弄清楚爲什麼如果細胞中的圖像在之前兌現過,細胞爲零。 – OzBoz

+0

@Rob謝謝你的答案。但是,還是有些不清楚。使用'cacheType == SDImageCacheTypeNone'檢查數據是否來自網頁然後製作動畫的邏輯。如果沒有,那麼不要因爲緩存的圖像應該立即顯示沒有動畫(如Instagram應用程序)。我無法理解的是,爲什麼細胞變成零(如果設置圖像到ImageView被預先加載,則被另一行重用)。如果我更改第二行圖像的鏈接,單元格將變爲非零。爲什麼這樣呢? – OzBoz