在我的应用中,我想显示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使用率。