2017-11-01 14 views
0

JSQMessageViewを使ってUIImageにGIF画像をロードします。私はUIImageViewにアクセスすることができないので、私はこれをメディアビューを変更するためにやった。しかし、画像はアニメートされません。私がしたいことをすることは可能ですか?ここでKingfisherのUIImageでgifを読み込みます。

は私のコードです:

let urlString = Helpers.getUrlFromGiphyText(text: message.body!) 
if let url = URL(string: urlString) { 
    KingfisherManager.shared.retrieveImage(with: url, options: 
    [.processor(DefaultImageProcessor.default), 
    .cacheSerializer(FormatIndicatedCacheSerializer.gif)], 
    progressBlock: 
    { receivedSize, totalSize in 
    print("(indexPath.row + 1): (receivedSize)/(totalSize)") 
    }, completionHandler: { image, error, cacheType, imageURL in 
    if let gifImage = image { 
    let mediaItem = JSQPhotoMediaItem(image: gifImage) 
    cell.mediaView = mediaItem?.mediaView() 
    } 
}) 
} 

答えて

2

私は私のアプリのために、このメディアフェッチャ方法を書いた、そしてそれはgifファイルで正常に動作します。

注:ちょうどカワセミマネージャは、遅滞なくするので、それぞれのファイルをダウンロードした後、私はDispatchQueue.main.asyncAfter(deadline: .now() + 0.5)を使用していることに気づく - GIFが最初のダウンロードでは再生できません。 私はこの1つに私の心を壊した。私はこれがおそらくKingfisherのキャッシュ同期の問題であると考えています。

mediaFetcher.downloadGifFile(url) { imageUrl in 
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { 
     // Use whatever u want to load the gif file 
    } 
} 

class MediaFetcher { 
    func downloadGifFile(_ url: URL, completion: @escaping (_ imageURL: URL) ->() = { (imageURL) in}) { 
     KingfisherManager.shared.retrieveImage(with: url, options: .none, progressBlock: nil) { (image, error, cacheType, imageUrl) in 
      guard error == nil else { 
       return 
      } 
      guard let imageUrl = imageUrl else { 
       return 
      } 
      completion(imageUrl) 
     } 
    } 
} 
関連する問題