【发布时间】: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