滚动时uicollectionviewcell中的图像加载错误

时间:2014-01-15 08:26:20

标签: ios uicollectionview uicollectionviewcell

我使用UICollectionview来显示很多自定义单元格(250或更多)。

这些单元格有一个主图像和一些文本。由于图像必须从Internet下载,我使用外部库AsyncImageView来执行延迟加载。

但问题是细胞的可重复使用性能让我发疯。

当我滚动图像时出现在错误的单元格中。除了索引路径之外,如何向图像添加标记或其他内容以避免出现问题?

也许AsyncImageView可以解决我忽略的问题......

或者另一种选择是更好的选择?

有任何线索吗?

提前致谢

编辑:我的代码的简化版

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

static NSString *identifier = @"Cell";

CollectionComercioCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];


if (cell == nil){
}
else{
    [[AsyncImageLoader sharedLoader] cancelLoadingImagesForTarget: cell.myImage];
}

cell.myImage.imageURL = nil;
cell.myImage.image = nil;

cell.myImage.hidden = TRUE;

cell.myImage.imageURL = [[myArray objectAtIndex:indexPath.row] getLogoUrl];

cell.myText.text = [[myArray objectAtIndex:indexPath.row] getName];

cell.myImage.hidden = FALSE;

return cell;

}

CustomCell.m

- (void)prepareForReuse
{
    [super prepareForReuse];    
    self.myImage.image = nil;  
}

1 个答案:

答案 0 :(得分:5)

确保在cellForRowAtIndexPath:方法中将图片设置为nil。这样,在加载新图像之前,它将保持至少为空。

正如您在评论中提到的那样,如果滚动速度慢,而不是滚动速度快,则可以覆盖自定义单元格上的- (void)prepareForReuse。 但请注意,Apple警告您不要将其用于内容更改:

  

出于性能原因,您应该只重置单元格的属性   与内容无关的内容,例如,alpha,编辑和   选择状态。表视图的委托   tableView:cellForRowAtIndexPath:应始终重置所有内容   重用一个单元格。如果单元对象没有关联的重用   标识符,不调用此方法。如果重写此方法,   你必须确保调用超类实现。