我正在使用Kingfisher框架来预取图像。 Kingfisher框架的链接是:https://github.com/onevcat/Kingfisher
这是我写的代码:
func downloadImages() {
if(self.albumImagePathArray.isEmpty == false) {
//dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
let urls = self.albumImagePathArray.map { NSURL(string: $0)! }
let prefetcher = ImagePrefetcher(urls: urls, optionsInfo: nil, progressBlock: nil, completionHandler: {
(skippedResources, failedResources, completedResources) -> () in
print("These resources are prefetched: \(completedResources)")
})
prefetcher.start()
}
}
我不确定如何使用这个框架,因为我对App开发很新。一旦我预取了图像,我如何从缓存中获取这些预取的图像。我想从缓存中选择这些图像并将它们放入UIImage数组中。以前我没有从缓存中选择,但我每次都加载URL并将它们放在一个名为albumImagePathArray的字符串数组中,并通过contentsOfURL将其转换为UIImage,以便将其放入albumImages中,如下面的代码所示: p>
var albumImages = [UIImage]()
for i in 0 ..< self.albumImagePathArray.count
{
let image = UIImage(data: NSData(contentsOfURL: NSURL(string: self.albumImagePathArray[i])!)!)
self.albumImages.append(image!)
}
现在我想改变所有这些,我想在预取后直接从缓存中选择,所以我不必每次都下载图像需要花费很多时间。有人可以帮我这个吗?非常感谢!
答案 0 :(得分:2)
我也是iOS Dev的新手,我正在使用翠鸟来存储图像以进行缓存。
要在预取图片时进入该点,您需要optionInfo
nil
。因此,如果我猜对了你从URL预取图像,那么在这个optionInfo
中你可以为每个图像设置一个缓存标识符,如果你把图像的URL放在那里最好。
Kingfisher文档非常清楚optionInfo
,因此您可以将功能更改为
func downloadImages() {
if(self.albumImagePathArray.isEmpty == false) {
let myCache = ImageCache(name: "the url of the images")
//dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
let urls = self.albumImagePathArray.map { NSURL(string: $0)! }
let prefetcher = ImagePrefetcher(urls: urls, optionsInfo: [.TargetCache(myCache)], progressBlock: nil, completionHandler: {
(skippedResources, failedResources, completedResources) -> () in
print("These resources are prefetched: \(completedResources)")
})
prefetcher.start()
}
}
通过这种做法,您可以将它们存储到缓存中。要继续,您必须在预取后向我们展示您尝试过的内容。