UIImageView+Extension.swift,Kingfisher

import UIKit

import Kingfisher


private var lastURLKey: Void?


extension UIImageView {

public var fin_webURL: URL? {

return objc_getAssociatedobject(self,&lastURLKey) as? URL

}

fileprivate func fin_setWebURL(_ URL: Foundation.URL) {

objc_setAssociatedobject(self,&lastURLKey,URL,.OBJC_ASSOCIATION_RETAIN_NONATOMIC)

}

func fin_setimageWithUrl (_ URL: Foundation.URL,placeholderImage: UIImage? = nil

,imageModificationClosure:((_ image:UIImage) -> UIImage)? = nil){

self.image = placeholderImage

let resource = ImageResource(downloadURL: URL)

fin_setWebURL(resource.downloadURL)

KingfisherManager.shared.cache.retrieveImage(forKey: resource.cacheKey,options: nil) { (image,cacheType) -> () in

if image != nil {

dispatch_sync_safely_main_queue({ () -> () in

self.image = image

})

}

else {

KingfisherManager.shared.downloader.downloadImage(with: resource.downloadURL,options: nil,progressBlock: nil,completionHandler: { (image,error,imageURL,originalData) -> () in

if let error = error,error.code == KingfisherError.notModified.rawValue {

KingfisherManager.shared.cache.retrieveImage(forKey: resource.cacheKey,completionHandler: { (cacheImage,cacheType) -> () in

self.fin_setimage(cacheImage!,imageURL: imageURL!)

})

return

}

if var image = image,let originalData = originalData {

//处理图片

if let img = imageModificationClosure?(image) {

image = img

}

//保存图片缓存

KingfisherManager.shared.cache.store(image,original: originalData,forKey: resource.cacheKey,todisk: true,completionHandler: nil)

self.fin_setimage(image,imageURL: imageURL!)

}

})

}

}

}

fileprivate func fin_setimage(_ image:UIImage,imageURL:URL) {

dispatch_sync_safely_main_queue { () -> () in

guard imageURL == self.fin_webURL else {

return

}

self.image = image

}

}

}


func fin_defaultimageModification() -> ((_ image:UIImage) -> UIImage) {

return { ( image) -> UIImage in

let roundedImage = image.roundedCornerImageWithCornerRadius(3)

return roundedImage

}

}



//func dispatch_sync_safely_main_queue(_ block: ()->()) {

// if Thread.isMainThread {

// block()

// } else {

// dispatchQueue.main.sync {

// block()

// }

// }

//}



//设置圆角


/*

import UIKit


extension UIImage {

func roundedCornerImageWithCornerRadius(_ cornerRadius:CGFloat) -> UIImage {

let w = self.size.width

let h = self.size.height

var targetCornerRadius = cornerRadius

if cornerRadius < 0 {

targetCornerRadius = 0

}

if cornerRadius > min(w,h) {

targetCornerRadius = min(w,h)

let imageFrame = CGRect(x: 0,y: 0,width: w,height: h)

UIGraphicsBeginImageContextWithOptions(self.size,false,UIScreen.main.scale)

UIBezierPath(roundedRect: imageFrame,cornerRadius: targetCornerRadius).addClip()

self.draw(in: imageFrame)

let image = UIGraphicsGetimageFromCurrentimageContext()

UIGraphicsEndImageContext()

return image!

}

/*UIImageRenderingModeAutomatic // 根据图片的使用环境和所处的绘图上下文自动调整渲染模式。

UIImageRenderingModeAlwaysOriginal // 始终绘制图片原始状态,不使用Tint Color

UIImageRenderingModeAlwaystemplate // 始终根据Tint Color绘制图片,忽略图片的颜色信息。*/

class func imageUsedTemplateMode(_ named:String) -> UIImage? {

let image = UIImage(named: named)

if image == nil {

return nil

return image!.withRenderingMode(.alwaystemplate)

}

*/



//调用的地方

//

//self.avatarImageView.fin_setimageWithUrl(URL(string: "https:" + avata)!,placeholderImage: nil,imageModificationClosure: fin_defaultimageModification() )

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...