Kingfisher library で通常のUIImageViewをロードする代わりに、UIImageのみを取得する必要があります
それを実現するために、UIImageViewで回避策を実装しました。
let imageView = UIImageView()
imageView.kf_setImageWithURL(NSURL(string: cpa.imageName)!, placeholderImage: nil,
optionsInfo: [.Transition(ImageTransition.Fade(1))],
progressBlock: { receivedSize, totalSize in
print("\(receivedSize)/\(totalSize)")
},
completionHandler: { image, error, cacheType, imageURL in
anView!.image = image //anView IS NOT an UIImageView
anView!.frame.size = CGSize(width: 15.0, height: 15.0)
print("Finished")
})
このコードは完全に機能しますが、よりクリーンな方法で実行したいと思います。このライブラリにUIImageのみを取得するメソッドはありますか?非同期およびキャッシュ
これには、KingfisherManager
のretrieveImage(with:options:progressBlock: completionHandler:)
メソッドを使用できます。
たぶんこのようなもの:
KingfisherManager.shared.retrieveImage(with: url, options: nil, progressBlock: nil, completionHandler: { image, error, cacheType, imageURL in
print(image)
})
これは、kingFisher 5でイメージをダウンロードするための最新の構文です(Swift 4.2)でテスト済み)
func downloadImage(`with` urlString : String){
guard let url = URL.init(string: urlString) else {
return
}
let resource = ImageResource(downloadURL: url)
KingfisherManager.shared.retrieveImage(with: resource, options: nil, progressBlock: nil) { result in
switch result {
case .success(let value):
print("Image: \(value.image). Got from: \(value.cacheType)")
case .failure(let error):
print("Error: \(error)")
}
}
}
上記の関数の呼び出し方法
self.downloadImage(with: imageURL) //replace with your image url
新しいSwift 3バージョンでは、ImageDownloaderを使用できます。
ImageDownloader.default.downloadImage(with: url, options: [], progressBlock: nil) {
(image, error, url, data) in
print("Downloaded Image: \(image)")
}
ImageDownloader
はKingfisherの一部ですので、import Kingfisher
。
Kingfisher 5の別の方法:
KingfisherManager.shared.retrieveImage(with: url) { result in
let image = try? result.get().image
if let image = image {
...
}
}
スイフト5
let url = URL(string: USER_IMAGE_PATH + "\(arrGuserpic[index])")
cell.imgv.kf.setImage(with: url, placeholder: nil, options: nil, progressBlock: nil, completionHandler: { image, error, cacheType, imageURL in
if (image != nil){
cell.imgv.image = image
}
else {
cell.imgv.image = UIImage.init(named: "user")
}
})