2017-02-13 4 views
3

私のアプリでは、giphyからgifを表示したいと考えています。フェッチや全部は問題ありませんが、どのような傾向のあるgifを表示するのが良いのか分かりません。 私はこのコードですべてのGIFを表示する必要があるcollectionviewを持っている: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

私はあなたが見てみることができると思う:http://stackoverflow.com/a/26401392/2894160 –

答えて

2

AImageで同じ問題が発生し、APNGファイルも読み込まれます。私が見つけたのは、これらのGifとAPNGのフレームワークはすべて、発射のために別々のCADisplayLinkを使用していたということでした。私の場合、CPU使用率はセルあたり約7%で、セル数に比例して増加しました。

CADisplayLinksオブジェクトを無効にしたとき、読み込み後のCPU使用率は約3%でした。

解決策として、スクロールが開始されるとすべてのアニメーションを停止するか、場合によってはシングルトンを使用してすべてのAPNGファイルを停止することを検討しています。

これが役に立ちます。


UPDATE:

私は先に行って、最初にディスクにAPNGファイルを保存して、ステッカーの配列を作成することにより、MSSticker項目にすべての私のAPNGファイルを変換します。

ステッカーを使用すると、私のCPU使用量は5%で、メモリは7個のAPNGファイルで60MBです。 AImageViewを使用して各APNGを駆動する独自の方法は、CPU使用率を約40%にします。

関連する問題