【问题标题】:Gif takes too long to load in uiimageviewGif 在 uiimageview 中加载时间过长
【发布时间】:2015-06-19 12:26:24
【问题描述】:

我可以非常轻松地将图像异步加载到我的 UITableView 中,但是当我尝试加载 gif 时,我遇到了一大堆问题。

1) 如果我向下滚动表格并向后滚动,则 gif 会消失,并且需要大约 5 秒才能返回。普通图像不会发生这种情况 2)gif不会动画。这只是 gif 的第一帧。

我正在使用这个库来加载 gif:

import UIKit
import Foundation

class ImageLoader {

var cache = NSCache()

class var sharedLoader : ImageLoader {
  struct Static {
    static let instance : ImageLoader = ImageLoader()
    }
    return Static.instance
}

func imageForUrl(urlString: String, completionHandler:(image: UIImage?, url: String) -> ()) {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {()in
        var data: NSData? = self.cache.objectForKey(urlString) as? NSData

        if let goodData = data {
            var image = UIImage(data: goodData)

            if (urlString.lowercaseString.rangeOfString("gif") != nil) {
                image = UIImage.animatedImageWithData(goodData)
                println("gif")

            }

            dispatch_async(dispatch_get_main_queue(), {() in
                completionHandler(image: image, url: urlString)
            })
            return
        }

        var downloadTask: NSURLSessionDataTask = NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: urlString)!, completionHandler: {(data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
            if (error != nil) {
                completionHandler(image: nil, url: urlString)
                return
            }

            if data != nil {
                var image = UIImage(data: data)
                if (urlString.lowercaseString.rangeOfString("gif") != nil) {
                    image = UIImage.animatedImageWithData(data)
                                        println("gif2")

                }

                self.cache.setObject(data, forKey: urlString)
                dispatch_async(dispatch_get_main_queue(), {() in
                    completionHandler(image: image, url: urlString)
                })
                return
            }

        })
        downloadTask.resume()
    })

  }
}

然后我尝试在 cellforrowatindexpath 中显示图像:

 ImageLoader.sharedLoader.imageForUrl(arrayByVotes[indexPath.row].objectForKey("thumbnail") as NSString, completionHandler:{(image: UIImage?, url: String) in

     cell.thumbnail.image = image
     cell.thumbnail.contentMode = UIViewContentMode.Redraw

})

【问题讨论】:

  • 如果您要在 iOS 上显示 gif,我建议您研究一下:github.com/Flipboard/FLAnimatedImage
  • 您应该为 uiimages 数组而不是 gif 设置动画。
  • 如何将图像组合成一个数组?

标签: ios swift uiimageview gif


【解决方案1】:

UIImageView 不支持开箱即用的动画 GIF。为了在您的应用中显示动画 GIF,您需要使用 FLAnimatedImageOLImageView 之类的东西。

【讨论】:

  • 看起来您还没有对图像进行任何缓存。动画 GIF 可能非常大,因此您可能希望使用 SDWebImage 将它们缓存在磁盘上。
猜你喜欢
  • 2016-03-11
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 2015-09-25
  • 2018-11-07
  • 2012-08-23
  • 2016-06-20
  • 2016-02-17
相关资源
最近更新 更多