私はiOSには比較的新しいので、拡張機能を使ってダウンロードとキャッシュを管理する際にイメージの配列を作成する方法を理解していただきありがとうと思います。私はカップルの時間のためにこれで円で回っていたので、それは脳の信頼に取り組むときだと思った。私はこのような画像をダウンロードしてキャッシュするためにUIImageViewの延長作成画像をキャッシュに保存してイメージアレイを作成する(Swift)
:
let imageCache = NSCache()
extension UIImageView {
func loadImageUsingCacheWithURLString(url: NSURL) {
self.image = nil
// First check if there is an image in the cache
if let cachedImage = imageCache.objectForKey(url) as? UIImage {
self.image = cachedImage
return
}
else {
// Otherwise download image using the url location in Google Firebase
NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: { (data, response, error) in
if error != nil {
print(error)
}
else {
dispatch_async(dispatch_get_main_queue(), {
// Cache to image so it doesn't need to be reloaded every time the user scrolls and table cells are re-used.
if let downloadedImage = UIImage(data: data!) {
imageCache.setObject(downloadedImage, forKey: url)
self.image = downloadedImage
}
})
}
}).resume()
}
}
を...ので、それはロードコレクションビュー画像の素晴らしい作品。しかし、イメージの配列をキャプチャして別のビューコントローラに渡すことができ、すべてをもう一度ダウンロードする必要はありません(データの無駄遣い)。これを行う別の関数を作成しましたが、imageholder.imageは常にnilです。私はそれが非同期の問題だとは思わない、すべての画像がこの時点でキャッシュされているので、私がデバッグしても、それは決してゼロにならない。
var imageHolder: UIImageView!
var imagesArray:[UIImage] = [UIImage]()
// Function to create images array to use on the photo view.
func createImagesArray() {
for url in imagesURLArray {
imageHolder.loadImageUsingCacheWithURLString(url)
if imageHolder.image != nil {
imagesArray.append(imageHolder.image!)
}
}
}
シンプルなものが欠けているように感じますが、私は固執しています。ありがとうございました!
これにはライブラリを使用するだけです。 https://github.com/Haneke/HanekeSwift https://github.com/onevcat/Kingfisherなどをご検討ください。 – Fattie