我想在单元格中使用JSQMessageView在UIImage上加载gif图像。我无法访问任何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()
}
})
}
答案 0 :(得分:2)
我为我的应用程序编写了这个媒体提取器方法,它可以正常使用gif文件。
注意:注意我在翠鸟经理下载每个文件后使用DispatchQueue.main.asyncAfter(deadline: .now() + 0.5)
,因为没有延迟 - 第一次下载时不会播放GIF。
我在这个问题上破坏了我的想法。我想这可能是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)
}
}
}