我使用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;
}
答案 0 :(得分:5)
确保在cellForRowAtIndexPath:
方法中将图片设置为nil。这样,在加载新图像之前,它将保持至少为空。
正如您在评论中提到的那样,如果滚动速度慢,而不是滚动速度快,则可以覆盖自定义单元格上的- (void)prepareForReuse
。
但请注意,Apple警告您不要将其用于内容更改:
出于性能原因,您应该只重置单元格的属性 与内容无关的内容,例如,alpha,编辑和 选择状态。表视图的委托 tableView:cellForRowAtIndexPath:应始终重置所有内容 重用一个单元格。如果单元对象没有关联的重用 标识符,不调用此方法。如果重写此方法, 你必须确保调用超类实现。