Подтвердить что ты не робот

Получите UIImage только с библиотекой Kingfisher

Мне нужно получить UIImage только вместо загрузки обычного UIImageView с библиотекой Kingfisher

Чтобы реализовать это, я применил обходной путь с 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? Асинхронный и кешированный

4b9b3361

Ответ 1

Для этого можно использовать метод retrieveImage(with:options:progressBlock: completionHandler:) KingfisherManager.

Возможно, что-то вроде этого:

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

Ответ 2

С новой версией Swift 3 вы можете использовать ImageDownloader:

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

ImageDownloader является частью Kingfisher, поэтому не забудьте import Kingfisher.

Ответ 3

Это последний синтаксис для загрузки изображения в 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

Ответ 4

Еще один способ в Kingfisher 5:

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

Ответ 5

Swift 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")
}
})