[英]UICollectionView with NINetworkImageViews repeats images
我正在使用Nimbuskit的NINetworkImageView。 我有一個簡單的UICollectionView,它顯示圖像網格(NINetworkImageViews)。 通常,它的工作原理像一個超級按鈕,但是在某些情況下,某些NINetworkImageViews顯示錯誤的圖像。
我認為當圖像沒有路徑並且NINetworkImageView必須顯示默認圖像時會發生這種情況。 有時(幾次)它沒有顯示默認圖像,而是顯示了其他圖像,這些圖像屬於CollectionView的其他NINetworkImageView。
以下是相關代碼:
- (UICollectionViewCell*) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"ShelvingCell";
ShelvingCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
// Prueba para ver si esto arregla lo de que se repitan imágenes
[cell.feedNetworkImageView prepareForReuse];
cell.feedNetworkImageView.delegate = self;
// El collage necesita un tratamiento especial
if (indexPath.section == 0 && indexPath.row == 0)
{
cell.feedTitleLabel.text = @"";
cell.lastFeedNewTitleLabel.text = @"";
// Prueba para ver si esto arregla lo de que se repitan imágenes
[cell.feedNetworkImageView setPathToNetworkImage:@""];
// Prueba para ver si esto arregla lo de que se repitan imágenes
[cell.feedNetworkImageView prepareForReuse];
cell.feedNetworkImageView.image = [UIImage imageNamed:@"collage.png"];
}
else
{
MOFeed *feed = [self.feeds objectAtIndex:(indexPath.section*3 + indexPath.row - 1)];
cell.feedTitleLabel.text = feed.title;
// Recuperamos la última noticia del feed
MONoticia *ultimaNoticia = [feed lastFeedNew];
cell.lastFeedNewTitleLabel.text = ultimaNoticia.title;
if (![feed.feedImageURL isEqualToString:@""] && feed.feedImageURL)
{
// Prueba para ver si esto arregla lo de que se repitan imágenes
[cell.feedNetworkImageView prepareForReuse];
[cell.feedNetworkImageView setPathToNetworkImage:feed.feedImageURL];
}
else
{
// Prueba para ver si esto arregla lo de que se repitan imágenes
[cell.feedNetworkImageView prepareForReuse];
cell.feedNetworkImageView.image = [UIImage imageNamed:@"shelvingcell.png"];
// Prueba para ver si esto arregla lo de que se repitan imágenes
[cell.feedNetworkImageView setPathToNetworkImage:@""];
}
}
return cell;
}
非常感謝!
卡洛斯
我遇到了同樣的問題,當我深入研究問題時,看起來
[cell.feedNetworkImageView prepareForReuse];
沒有取消所有下載操作。 你必須做一點hack
通話前
[cell.feedNetworkImageView setPathToNetworkImage:feed.feedImageURL];
取消所有網絡操作操作,然后創建一個新的網絡操作
[self.displayImage.networkOperationQueue cancelAllOperations];
self.displayImage.networkOperationQueue = [[NSOperationQueue alloc]init];
[cell.feedNetworkImageView setPathToNetworkImage:feed.feedImageURL];
由於您每次下載映像都需要它自己的操作隊列,因此可以取消它,因此效率不高。 這可能需要更多的工作才能提高效率。 但到目前為止,似乎沒有重復的圖像
卡洛斯,我對NINetworkImageView不太了解,但是我的理論是UICollectionView正在重用您的視圖,並且您不會取消請求。 假設您加載了第一個單元格,然后對該圖像觸發了一個請求。 然后,您開始滾動。 該第一個單元將在第一個請求完成之前被重用,並且可能這個重用該單元的新項沒有圖像,因此您不必調用setPathNetwork ...結果,新的重用單元將具有第一個單元圖像。
NINetworkImageView中可能存在一種取消請求的方法。 每次重用這些視圖之一時調用它。
sal!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.