如何提高UICollectionViewCell的渲染性能

时间:2013-01-20 03:31:06

标签: ios uikit uicollectionview

当滚动浏览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始终更改时,图像不是。

提高快速滚动细胞的性能的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

如果不了解THMovieCell内部结构,但很难说清楚。您将图片网址设置为movie.ImageUrl。如果它是一个远程URL并且其图像尚未缓存,那么封面的缓慢更新是不可避免的,因为它必须加载此图像。另一个可能的原因是图像尺寸。如果您在屏幕上挤压了10张图像1024x1024,这可能会导致滚动时滞后。

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