预取后从缓存中挑选图像

时间:2016-06-21 16:37:43

标签: ios swift caching swift2 uiimage

我正在使用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!)
}

现在我想改变所有这些,我想在预取后直接从缓存中选择,所以我不必每次都下载图像需要花费很多时间。有人可以帮我这个吗?非常感谢!

1 个答案:

答案 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()
    }
}

通过这种做法,您可以将它们存储到缓存中。要继续,您必须在预取后向我们展示您尝试过的内容。