2017-02-13 86 views
3

在我的應用程序中,我想顯示來自giphy的gif。抓取和放置都不是問題,但我不知道以什麼方式顯示所有趨勢圖像的最佳方式。 我應該與此代碼顯示所有的GIF一個的CollectionView:在collectionview中顯示很多gifs

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 
    } 

的問題是,這一切都加載到內存和應用是極其緩慢。什麼是最好的方法來做到這一點?異步?延遲加載?

+1

我想你可以看看:http://stackoverflow.com/a/26401392/2894160 –

回答

2

我遇到了同樣加載APNG文件的AImage問題。我發現所有這些Gif和APNG框架都使用單獨的CADisplayLinks來觸發它們。就我而言,每個單元的CPU使用率大約爲7%,並且隨着單元的數量呈線性增長。

當我禁用CADisplayLinks對象時,我的CPU使用率在加載後總計約爲3%。

對於解決方案,我正考慮停止所有動畫,一旦滾動開始,或可能使用單例驅動我所有的APNG文件。

希望這會有所幫助。


UPDATE:

我說幹就幹,首先將APNG文件保存到磁盤,然後創建貼紙的數組轉換我所有的APNG文件MSSticker項目。

使用貼紙,我的CPU使用率爲5%,7個APNG文件的內存爲60MB。我使用AImageView來驅動每個APNG的原始方法可以獲得大約40%的CPU使用率。