2

我已經嘗試了異步加載圖像的許多方法,他們都有這個問題,這包括第三方框架。這使我相信它與我的單元格有關的行索引方法。異步圖像加載閃爍?

反正我目前加載圖像異步使用大中央調度和塊,這裏是我的代碼:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"CustomTableCell"; 
    static NSString *CellNib = @"CustomizedCell"; 

    CustomizedCell *cell = (CustomizedCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellNib owner:self options:nil]; 
     cell = (CustomizedCell *)[nib objectAtIndex:0]; 

    } 



    // Configure the cell... 

    cell.Label.text = [self.TitleArray objectAtIndex:indexPath.row];  

     dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); 
     dispatch_async(queue, ^{ 
      NSString *String = [[self.Array objectAtIndex:indexPath.row]; 
      NSURL *url = [NSURL URLWithString:String]; 
      NSData *Data = [NSData dataWithContentsOfURL:url]; 
      UIImage *Image = [UIImage imageWithData:Data]; 
      dispatch_sync(dispatch_get_main_queue(), ^{ 
       cell.ImageView.image = Image; 
      }); 
     }); 

這似乎Asychrnously加載圖像,但我在使用第三方libarys所有嘗試一樣,不同的代碼等,圖像閃爍。我的意思是,當你滾動一個單元格的圖像時,看起來會閃爍,並在快速變回之前切換到另一個單元格的另一個圖像,使其看起來好像閃爍。這隻發生在你滾動的時候,通常只有前兩個和最後兩個單元格。 任何想法爲什麼? 如果有人可以幫助我解決這個問題,我會非常感激!

謝謝!

回答

2

那麼,暫時不要使用GCD,但是我發現代碼存在問題。

您是否隨時取消當前進程? 我的意思是,你滾動查看其他單元格,但已經有一個過程下載(舊的和可重用的)單元格的圖像,不是?也許這就是你的「閃爍」問題。

如果是你,我會創建一個UIImageView的子類,並實現一種方法來取消當前連接,如果另一個圖像要加載。

順便說一下,您可以使用NSOperation & NSOperationQueue,它不使用任何第三個庫。

祝你好運。

+0

感謝您的回覆!我沒有想到這一點,但是有沒有一個原因,它只發生在前兩個和最後兩個?我嘗試使用NSOperation,並嘗試繼承uiimageview,但仍然有同樣的問題。雖然我沒有嘗試取消連接,但我一次只能在屏幕上顯示八個單元格,在這種情況下最好不要重複使用它們。再次感謝! – ApiMail

+1

那麼,你可以試着不重複使用它們來避免這個問題(我認爲這不是一個好方法:p)。但我認爲這是你的問題^^我沒有看到任何其他原因。也許在有一些緩存後,你不會再看到問題。你應該嘗試使用更多的細胞...... ^^但是如果你再次使用NSOperation執行操作並在加載另一個圖像時取消操作,那麼你應該沒有任何問題。祝你好運。 – Vinzius