使用Swift中的AlamofireImage将GIF图像映射到UIImageView

时间:2018-04-11 13:16:57

标签: ios swift uiimageview gif alamofireimage

我正在使用AlamofireImage库来下载/缓存Web图像并在tableViewCells中的UIImageView中显示它。

imageView.af_setImage(withURL: url, placeholderImage: nil, filter: nil, imageTransition: .crossDissolve(0.3), runImageTransitionIfCached: true, completion: { (response) in
//...... other code .....
})

它适用于.png / .jpg或其他静止图像,但我无法使用此功能显示GIF图像。

我尝试使用外部库将imageData转换为gif图像,但它工作得很完美,但Alamofire并未缓存gif数据,下次将图像加载为静止图像。

检查以下代码:

imageView.af_setImage(withURL: url, placeholderImage: nil, filter: nil, imageTransition: .crossDissolve(0.3), runImageTransitionIfCached: true, completion: { (response) in

        if imageUrl.hasSuffix("gif") {
            if let data = response.data{
                self.imageView.image = UIImage.gifImageWithData(data)
            }
        }
    })

以上代码首次显示GIF,但下次仅显示静止图像。

知道如何使用AlamofireImage实现以下目标:

  1. 首次下载GIF imageData,将其缓存并向GIF格式显示

  2. 下次从缓存中获取imageData并再次显示GIF

2 个答案:

答案 0 :(得分:0)

我还没有找到使用 AlamofireImage 播放 GIF 的直接方法,但我们可以使用 SwiftyGif。我在整个应用程序中都使用 AlamofireImage,但为了显示 GIF 和从服务器加载,我使用的是 SwiftyGif。使用 SwiftyGif,您可以播放、从服务器加载以及在本地加载。我认为这将是可靠的解决方案,而不是使用 SDWebImage。

SwiftyGif

axios({
  method: "post",
  url: "myurl",
  data: myFormData,
  headers: { "Content-Type": "multipart/form-data" },
})
  .then(function (response) {
    //handle success
    console.log(response);
  })
  .catch(function (response) {
    //handle error
    console.log(response);
  });

答案 1 :(得分:-1)

  • 下载GIF文件,下次获取文件并显示

    Alamofire.download(gifUrl, to: destination).responseJSON(completionHandler: {
        response in
    
        if let filePath = response.destinationURL?.path{
            if let gifImage = UIImage.init(contentsOfFile: filePath){
                self.imageVIew.image = gifImage
            }
        }
    })