ios - 在 collectionview 中显示大量 gif

标签 ios swift gif giphy giphy-api

在我的应用程序中,我想显示来自 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 和 A​​PNG 框架都使用单独的 CADisplayLinks 进行触发。在我的例子中,每个单元的 CPU 使用率约为 7%,并且随着单元的数量呈线性增长。

当我禁用 CADisplayLinks 对象时,加载后我的 CPU 使用率约为 3%。

作为解决方案,我正在考虑在滚动开始后停止所有动画,或者可能使用单例来驱动我所有的 APNG 文件。

希望这对您有所帮助。


更新:

我继续将所有 APNG 文件转换为 MSSticker 项目,首先将 APNG 文件保存到磁盘,然后创建贴纸数组。

使用 Stickers,我的 CPU 使用率为 5%,内存为 60MB,用于 7 个 APNG 文件。我使用 AImageView 驱动每个 APNG 的原始方法获得了大约 40% 的 CPU 使用率。

关于ios - 在 collectionview 中显示大量 gif,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42199726/

相关文章:

ios - 修改 NSParagraphStyle 中的行间距属性导致光标伸长

ios - 在对 tableView 约束进行动画处理时,TableViewCells 最初的大小错误

ffmpeg - 使用 ffmpeg 调整(缩放)gif 时透明度消失

objective-c - NSCoder - 使用多级嵌套数组对数组进行编码

ios - 如果用户拥有没有 watch 扩展的 Apple Watch,如何在 iOS 应用程序中进行跟踪?

c++ - opencv unactorPoints 返回 NaN ios

swift - 如何将自定义单元格添加到动态生成的 TableView ?

javascript - 仅在显示 gif 后提示警报

delphi - Firemonkey 中的动画 GIF

ios - 具有复杂触摸代码的 View 是否应该有自己的 View Controller ?