0

滚动浏览 UICollectionView 时,似乎并非所有内容cellForItemAtIndexPath都被一致地调用。我想知道这是否是因为在方法完成之前细胞被回收了。

例如(我使用来自 AFNetworking 的 UIImageView 类别):

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
THMovieCell* cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];

NSNumber* position = [[NSNumber alloc] initWithInteger:indexPath.row + 1];
THMovie* movie = [self.Movies objectForKey:position];

if (movie.ImageUrl) {
    [cell.Cover setImageWithURL:movie.ImageUrl];
}

cell.Title.text = movie.Title;

return cell;
}

...但是,虽然cell.Title我的自定义单元格中的 UILabel 一直在更改,但图像却没有。

提高快速滚动单元格性能的最佳方法是什么?

4

1 回答 1

0

在不了解THMovieCell内部结构的情况下很难说,但仍然如此。您将图像 URL 设置为movie.ImageUrl. 如果它是一个远程 URL 并且它的图像还没有被缓存,那么缓慢的封面更新是不可避免的,因为它必须加载这个图像。另一个可能的原因是图像大小。如果您在屏幕上挤压了 10 张 1024x1024 的图像,这可能会导致滚动延迟很大。

  1. 检查您的图像缓存性能(如果有)。使其异步,取消任何不需要的图像加载操作,因为电影已经超出屏幕。
  2. 检查图像尺寸。尽可能使用缩略图。
  3. 将封面的图像设置为默认的本地图像,指示加载过程,并且仅在此之后设置新的图像 URL。这样,用户将被通知封面即将更改。
  4. 修复封面更新逻辑。现在,如果电影没有图像,则单元格的图像将不会更新,并将继续显示它用于的上一部电影的图像。
于 2013-01-20T08:45:33.673 回答