Загрузить gif на UIImage от Kingfisher

Я хочу загрузить изображение GIF на UIImage, используя JSQMessageView в ячейке. Я не могу получить доступ к любому UIImageView, поэтому я сделал это, чтобы изменить вид мультимедиа. Но изображения не оживляют. Можно ли делать то, что я хочу?

Вот мой код:

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()
  }
})
}

1 ответ

Я написал этот метод медиа выборки для моего приложения, и он отлично работает с файлами GIF.

ПРИМЕЧАНИЕ: просто обратите внимание, что я использую DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) после того, как диспетчер зимородка загружает каждый файл, так как без задержки - гифки не воспроизводятся при первой загрузке. Я разрушил мои мысли об этом. Я полагаю, что это, вероятно, некоторая проблема с синхронизацией кэша в 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)
        }
    }
}
Другие вопросы по тегам