UIcollectionView 具有缓慢的图像加载和滚动

Posted

技术标签:

【中文标题】UIcollectionView 具有缓慢的图像加载和滚动【英文标题】:UIcollectionView has slow jerky loading of images and scrolling 【发布时间】:2013-05-09 04:05:14 【问题描述】:

我有一个 UICollectionView,里面有一些图像。在第一次向下滚动时加载图像非常缓慢和生涩。之后,加载图像时就可以了。

我猜问题是直到单元格到达导致延迟的屏幕才加载图像。我假设我需要做的是在图像出现在屏幕上之前加载它们。我不知道该怎么做,显然我在寻找错误的东西,因为我找不到任何答案。请有人能指出我正确的方向吗??

这是加载图像的代码...图像在我的应用程序中没有下载或任何东西。

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
    static NSString *CellIdentifier = @"Cell";
    CustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
    [[cell myImage]setImage:[UIImage imageNamed:[arrayOfImages objectAtIndex:indexPath.item]]];

    return cell;

谢谢!

【问题讨论】:

我猜你已经解决了这个问题,但在我的情况下,启用的分页会破坏滚动性能。我不需要它,所以一旦我停用滚动速度非常快。 你一定已经解决了这个问题。我面临同样的问题,但我正在加载谷歌地图而不是图像。你能分享一下解决方案,它可能会有所帮助吗? + @JuanGonzález 【参考方案1】:

看看这个answer

在你的出队之后添加这两行

cell.layer.shouldRasterize = YES;
cell.layer.rasterizationScale = [UIScreen mainScreen].scale;

【讨论】:

【参考方案2】:

正如您所发现的,即使您没有下载图像,在滚动过程中从永久存储加载仍然太慢。尝试将 +imageNamed: 调用视为下载,这会使代码更复杂,但会修复响应性。 Poor UICollectionView Scrolling Performance With UIImage 等其他问题的答案可能会有所帮助。

【讨论】:

【参考方案3】:

只需获取内容并将其异步存储在数组中。并且只做委托方法中的分配部分。如果要一次显示所有单元格,请放置一个示例缩略图图像,并在数组获取真实图像时将其替换为原始图像。否则,您可以在数组每次获取对象时重新加载集合视图,这样集合视图的单元格计数会随着图像的获取而逐渐增加。

【讨论】:

以上是关于UIcollectionView 具有缓慢的图像加载和滚动的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UICollectionView 中显示 UIView 的一部分?

重新加载子视图(UICollectionview)

具有异步图像加载的自调整 UICollectionView 单元格

如何在使用自定义单元格的 UICollectionView 中正确设置异步图像下载?

UICollectionViewCell 中的 UICollectionView 滚动缓慢/滞后

UITableViewCell 内的 UICollectionView 滚动缓慢