您的位置:首页 > 移动开发 > Swift

UIImageView+Extension.swift,Kingfisher

2017-05-03 10:00 676 查看
import UIKitimport 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, options: nil, 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() )
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  View Extension UIImage