首页 文章

在collectionview中显示很多GIF

提问于
浏览
3

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

1 回答

  • 3

    我遇到了同样的问题,AImage也加载了APNG文件 . 我发现所有这些Gif和APNG框架都使用单独的CADisplayLink来解雇它们 . 就我而言,每个单元的CPU使用率约为7%,并且与单元数量成线性增长 .

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

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

    希望这可以帮助 .


    更新:

    我继续将所有APNG文件转换为MSSticker项目,首先将APNG文件保存到磁盘,然后创建一个贴纸阵列 .

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

相关问题