在我的应用中,我想显示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中,并且应用程序非常慢。最好的方法是什么?异步?延迟加载?

最佳答案

我在AImage中也遇到了同样的问题,它也加载了APNG文件。我发现所有这些Gif和APNG框架均使用单独的CADisplayLinks进行触发。在我的案例中,每个单元的CPU使用率约为7%,并且随着单元数的增加呈线性增长。

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

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

希望这可以帮助。

更新:

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

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

10-04 17:36