在 collectionview 中显示大量 gif
displaying a lot of gifs in collectionview
在我的应用程序中,我想显示来自 giphy 的 gif。获取和一切都没有问题,但我不知道什么是显示所有趋势 gif 的最佳方式。
我有一个 collectionview,它应该使用以下代码显示所有 gif:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: GifChooserCell.cellIdentifier, for: indexPath) as! GifChooserCell
let data = try! Data(contentsOf: gif.giphyURL)
let image = FLAnimatedImage(animatedGIFData: data)
cell.image.animatedImage = image
return cell
}
问题是这会将所有内容加载到 RAM 中并且应用程序非常慢。最好的方法是什么?异步?延迟加载?
我在加载 APNG 文件的 AImage 中遇到了同样的问题。我发现所有这些 Gif 和 APNG 框架都使用单独的 CADisplayLinks 进行触发。在我的例子中,CPU 每个单元格的使用率约为 7%,并且随着单元格的数量呈线性增长。
当我禁用 CADisplayLinks 对象时,我的 CPU 使用率在加载后约为 3%。
作为解决方案,我正在考虑在滚动开始后停止所有动画,或者可能使用单例来驱动我所有的 APNG 文件。
希望对您有所帮助。
更新:
我继续将所有 APNG 文件转换为 MSSticker 项目,首先将 APNG 文件保存到磁盘,然后创建贴纸数组。
使用贴纸,我的 CPU 使用率为 5%,7 个 APNG 文件的内存为 60MB。我使用 AImageView 驱动每个 APNG 的原始方法获得了大约 40% CPU 的使用率。
在我的应用程序中,我想显示来自 giphy 的 gif。获取和一切都没有问题,但我不知道什么是显示所有趋势 gif 的最佳方式。 我有一个 collectionview,它应该使用以下代码显示所有 gif:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: GifChooserCell.cellIdentifier, for: indexPath) as! GifChooserCell
let data = try! Data(contentsOf: gif.giphyURL)
let image = FLAnimatedImage(animatedGIFData: data)
cell.image.animatedImage = image
return cell
}
问题是这会将所有内容加载到 RAM 中并且应用程序非常慢。最好的方法是什么?异步?延迟加载?
我在加载 APNG 文件的 AImage 中遇到了同样的问题。我发现所有这些 Gif 和 APNG 框架都使用单独的 CADisplayLinks 进行触发。在我的例子中,CPU 每个单元格的使用率约为 7%,并且随着单元格的数量呈线性增长。
当我禁用 CADisplayLinks 对象时,我的 CPU 使用率在加载后约为 3%。
作为解决方案,我正在考虑在滚动开始后停止所有动画,或者可能使用单例来驱动我所有的 APNG 文件。
希望对您有所帮助。
更新:
我继续将所有 APNG 文件转换为 MSSticker 项目,首先将 APNG 文件保存到磁盘,然后创建贴纸数组。
使用贴纸,我的 CPU 使用率为 5%,7 个 APNG 文件的内存为 60MB。我使用 AImageView 驱动每个 APNG 的原始方法获得了大约 40% CPU 的使用率。