KingFisher
を利用して、画像URLから画像データ(UIImage型やNSData型)をダウンロードする方法
var images = [UIImage]
var datas = [NSData]
let kf = KingfisherManager.sharedManager.downloader
for file in files {
kf.downloadImageWithURL(NSURL(string: file.url!)!,
progressBlock:nil,
completionHandler: { (image, error, imageURL, originalData) -> () in
images.append(image)
datas.append(originalData)
})
}
ちなみに、下記のようにUIImageView.kf_setImageWithURL
でcompletionHandler
からコールバックする方法では、一度UIImageView
で画像表示され、メモリにキャッシュされた場合のみ、completionHandler
が実行されるみたいで、一度も表示されていない画像についてはcompletionHandler
で画像データを扱うことができないので注意。(結構ハマった)
imageView.kf_setImageWithURL(NSURL(string: "your_image_url")!,
placeholderImage: nil,
optionsInfo: nil,
progressBlock: { (receivedSize, totalSize) -> () in
print("Download Progress: \(receivedSize)/\(totalSize)")
},
completionHandler: { (image, error, cacheType, imageURL) -> () in
// ★1回表示した画像のみ実行される!
print("Downloaded and set!")
}
)
参考
https://github.com/onevcat/Kingfisher/issues/227
https://github.com/onevcat/Kingfisher/issues/94
Kingfisher Reference