Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 仅使用翠鸟库获取UIImage_Ios_Swift2_Uiimage_Kingfisher - Fatal编程技术网

Ios 仅使用翠鸟库获取UIImage

Ios 仅使用翠鸟库获取UIImage,ios,swift2,uiimage,kingfisher,Ios,Swift2,Uiimage,Kingfisher,我只需要获取一个UIImage,而不是加载一个普通的UIImageView 为了实现这一点,我使用UIImageView实现了一种变通方法: let imageView = UIImageView() imageView.kf_setImageWithURL(NSURL(string: cpa.imageName)!, placeholderImage: nil, optionsInfo: [.Transition(ImageTransition.Fade(1))],

我只需要获取一个UIImage,而不是加载一个普通的UIImageView

为了实现这一点,我使用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的方法检索图像(带有:选项:progressBlock:completionHandler:)进行此操作

也许是这样的:

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

使用新的Swift 3版本,您可以使用ImageDownloader:

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

ImageDownloader
是翠鸟的一部分,所以不要忘记导入翠鸟

这是翠鸟5中下载图像的最新语法(在swift 4.2中测试)

如何调用上述函数

self.downloadImage(with: imageURL) //replace with your image url
翠鸟5

imageView.kf.setImage(with: url) { result in
   switch result {
   case .success(let value):
       print("Image: \(value.image). Got from: \(value.cacheType)")
   case .failure(let error):
       print("Error: \(error)")
   }
 } 

查看更多信息:

翠鸟5中的另一种方式:

KingfisherManager.shared.retrieveImage(with: url) { result in
    let image = try? result.get().image
    if let image = image {
        ...
    }
}
斯威夫特5 此代码100%正常工作

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

我将在@Hardik Thakkar上完成回答,添加一个更改,以便您可以使用帮助某人的闭包返回图像:

func downloadImage(with urlString : String , imageCompletionHandler: @escaping (UIImage?) -> Void){
        guard let url = URL.init(string: urlString) else {
            return  imageCompletionHandler(nil)
        }
        let resource = ImageResource(downloadURL: url)
        
        KingfisherManager.shared.retrieveImage(with: resource, options: nil, progressBlock: nil) { result in
            switch result {
            case .success(let value):
                imageCompletionHandler(value.image)
            case .failure:
                imageCompletionHandler(nil)
            }
        }
    }
如何致电:

 downloadImage(with :yourUrl){image in
     guard let image  = image else { return}
      // do what you need with the returned image.
 }

这将不会根据以下
cachePolicy:.reloadIgnoringLocalCacheData
利用缓存,这是使用Kinfisher而不是在Swift 3中将其重命名为
KingfisherManager.shared.retrieveImage(with:url!,options:nil,progressBlock:nil){(image,error,cacheType,imageURL)->()在print(image)}
中,这是否也会缓存图像?@DoesData是的does@DmitrijRogov您是否需要执行任何操作来将图像存储在缓存中?它是内存还是磁盘中的缓存?资源是一个URL(“URL字符串”)对象,因此对于来自其他语言的任何人来说都不清楚。此外,您可以删除发送nil的参数,也可以在不关心图像不加载的情况下删除完成handler。这不获取UIImage对象,只允许您设置UIImageView的图像字段。使用此函数时,我在调用实例方法“retrieveImage”时没有得到精确匹配
 downloadImage(with :yourUrl){image in
     guard let image  = image else { return}
      // do what you need with the returned image.
 }