Загрузить 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)
}
}
}