web-dev-qa-db-ja.com

KingfisherライブラリでのみUIImageを取得

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のみを取得するメソッドはありますか?非同期およびキャッシュ

27
Patonz

これには、KingfisherManagerretrieveImage(with:options:progressBlock: completionHandler:)メソッドを使用できます。

たぶんこのようなもの:

KingfisherManager.shared.retrieveImage(with: url, options: nil, progressBlock: nil, completionHandler: { image, error, cacheType, imageURL in
    print(image)
})
52
onevcat

これは、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
13
Hardik Thakkar

新しいSwift 3バージョンでは、ImageDownloaderを使用できます。

ImageDownloader.default.downloadImage(with: url, options: [], progressBlock: nil) {
    (image, error, url, data) in
    print("Downloaded Image: \(image)")
}

ImageDownloaderはKingfisherの一部ですので、import Kingfisher

10
Paweł

Kingfisher 5の別の方法:

KingfisherManager.shared.retrieveImage(with: url) { result in
    let image = try? result.get().image
    if let image = image {
        ...
    }
}
2
nsc9012

スイフト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")
}
})
0
Shakeel Ahmed