之前使用OC版本的,都是基于AFN而自行封装的类库,
现在写了一个swift版本的,很方便使用,在些开源出来。
首先是图片下载类:
// // HYBImageLoader.swift // OSChinaClient // // Created by 黄仪标 on 15/3/5. // Copyright (c) 2015年 huangyibiao free edu. All rights reserved. // import Foundation import UIKit /// /// 图片下载类,使用NSCache作为缓存处理 /// /// 作者:黄仪标 /// /// Email: 632840804@qq.com /// /// github:https://github.com/632840804 /// /// CSDN Blog: http://blog.csdn.net/woaifen3344/ /// /// Note:有任何可以,可以通过Email反馈,会在空闲时间处理,谢谢! /// class HYBImageLoader { /// 缓存处理对象 var cache = NSCache() /// /// 声明为单例 /// class var sharedInstance : HYBImageLoader { struct Loader { static let instance = HYBImageLoader() } return Loader.instance } /// /// 加载图片 /// /// url 图片请求地址 /// /// completion 加载完成时的回调,不论是加载成功还是加载失败,都会回调 /// image 可空类型,为nil表示加载失败,不为nil,表示加载成功 /// isFromCache Bool类型,表示是否是从缓存中提取出来的图片 func loadImage(url: String, completionHandler:(image: UIImage?, isFromCache: Bool) -> ()) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {()in var data: NSData? = self.cache.objectForKey(url.md5ForLoader) as? NSData if let goodData = data { let image = UIImage(data: goodData) dispatch_async(dispatch_get_main_queue(), {() in completionHandler(image: image, isFromCache: true) }) return } var downloadTask: NSURLSessionDataTask = NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)!, completionHandler: {(data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in if (error != nil) { completionHandler(image: nil, isFromCache: false); return } if data != nil { let image = UIImage(data: data) self.cache.setObject(data, forKey: url.md5ForLoader) dispatch_async(dispatch_get_main_queue(), {() in completionHandler(image: image, isFromCache: false) }) return } }); downloadTask.resume() }) } } /// /// String结构通用功能扩展 /// extension String { /// /// 获取自身md5加密后的字符串 /// var md5ForLoader : String { let str = self.cStringUsingEncoding(NSUTF8StringEncoding) let strLen = CC_LONG(self.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)) let digestLen = Int(CC_MD5_DIGEST_LENGTH) let result = UnsafeMutablePointer<CUnsignedChar>.alloc(digestLen); CC_MD5(str!, strLen, result); var hash = NSMutableString(); for i in 0 ..< digestLen { hash.appendFormat("%02x", result[i]); } result.destroy(); return String(format: hash) } }
接下来就是图片加载控件类:
// // HYBLoadingImageView.swift // OSChinaClient // // Created by 黄仪标 on 15/3/5. // Copyright (c) 2015年 huangyibiao free edu. All rights reserved. // import Foundation import UIKit typealias HYBImageLoadingCompletion = (image: UIImage?) -> (); typealias HYBImageCompletion = (image: UIImage?, isFromCache: Bool) -> (); /// /// 图片加载控件,所有需要到网络加载的图片,都需要使用此控件操作 /// /// 作者:黄仪标 /// /// Email: 632840804@qq.com /// /// github:https://github.com/632840804 /// /// CSDN Blog: http://blog.csdn.net/woaifen3344/ /// /// Note:有任何可以,可以通过Email反馈,会在空闲时间处理,谢谢! /// class HYBLoadingImageView: UIImageView { override convenience init() { self.init(frame: CGRectZero); } override init(frame: CGRect) { super.init(frame: frame); self.clipsToBounds = true; self.layer.masksToBounds = true; } required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder); self.clipsToBounds = true; self.layer.masksToBounds = true; } /// /// 是否将图片控件显示为圆形 /// /// isCircle true表示显示为圆 /// func isCircle(isCircle: Bool = false) { if isCircle == true { var width = min(self.frame.size.width, self.frame.size.height); self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, width, width); self.layer.cornerRadius = width / 2; } } /// /// 加载图片 /// /// url 图片请求地址 /// func loadImage(url: String) { self.loadImage(url, holder: ""); } /// /// 加载图片 /// /// url 图片请求地址 /// /// holder 占位图片名称 /// func loadImage(url: String, holder: String) { self.loadImage(url, holder: holder, completion: nil); } /// /// 加载图片 /// /// url 图片请求地址 /// /// completion 图片加载完成时的回调闭包 /// func loadImage(url: String, completion: HYBImageLoadingCompletion?) { self.loadImage(url, holder: "", completion: completion); } /// /// 加载图片 /// /// url 图片请求地址 /// /// holder 占位图片名称 /// /// completion 图片加载完成时的回调闭包 /// func loadImage(url: String, holder: String, completion: HYBImageLoadingCompletion?) { if !holder.isEmpty { self.image = UIImage(named: holder); } if url.isEmpty { completion?(image: nil); return; } HYBImageLoader.sharedInstance.loadImage(url, completionHandler: { (image, isFromCache) -> () in if image == nil { // 图片加载失败 completion?(image: nil); } else { println(url); // 在图片加载成功后,如果处理添加图片显示的动画处理,如果在此处添加 if !isFromCache { // 添加淡入淡出的动画效果 let animation = CATransition(); animation.duration = 0.65; animation.type = kCATransitionFade; animation.removedOnCompletion = true; self.layer.addAnimation(animation, forKey: "transition"); } self.image = image; completion?(image: image); } }); } }
github下载地址: https://github.com/632840804/SwiftImageView/tree/master