【问题标题】:How can I set a CollectionViewCells image faster after scrolling through cells?滚动单元格后如何更快地设置 CollectionView Cells 图像?
【发布时间】:2015-10-12 14:54:54
【问题描述】:

我有一个CollectionView,它使用高质量图像显示项目列表。为了提高滚动时的性能,我植入了以下代码:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), { () -> Void in
            var image = UIImage(data: item.image_data as! NSData)
            UIGraphicsBeginImageContextWithOptions(image!.size, true, 0);
            image?.drawAtPoint(CGPointZero)
            image = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();
            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                cell.itemImage.image = image
            })
})

这消除了滚动的所有延迟,但会导致一个新问题 - 如果我快速滚动 100 个项目,我登陆的单元格可能会更改图像 5-6 次,然后才会停留在该项目的正确图像上。我猜这只是collectionView 的追赶。

所以我需要尽可能快地平滑滚动和正确显示图像。什么是两全其美的最有效方法?

我尝试在viewDidLoad() 中预加载图像,然后根据需要将其插入,但结果证明这是一个灾难性的记忆想法。

【问题讨论】:

    标签: ios swift uiimageview uicollectionview


    【解决方案1】:

    我确实相信这是因为您正在更新基于重用机制返回的完全相同单元格的 itemImage ......因此,每次显示新单元格时,您最终都会进行后台下载,然后 - 一旦完成 -更新重用堆栈中的一个单元格,等等。

    您应该添加一个额外的级别以根据行号填充图像数组,并在更新单元格之前查看该行是否仍在屏幕上,并使用您已经获得的图像(如果有的话)一旦出现新的单元格屏幕。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多