swift_035(Swift之第三方库Kingfisher篇)
[快速学会Swift第三方库] Kingfisher篇
Kingfisher是一个轻量的下载和缓存网络图片库。下载和缓存是异步进行操作,已经下载好的图片会缓存在内存和本地,极大得提高app的体验。
(文档地址:http://cocoadocs.org/docsets/Kingfisher/1.6.1/Typealiases.html#/s:10Kingfisher32ImageDownloaderCompletionHandler)
目录
- 快速学会Swift第三方库 Kingfisher篇
- 基础操作
- 使用optionsInfo参数
- 回调函数
- 取消任务
- 下载器
- 缓存系统
- 预取
- 动态图片
其他操作
另外还需要在Target->工程名->Build Settings->Search Paths->User Header Search Paths处添加Kingfisher所在的目录:
最后在你需要用到Kingfisher的类中加上:
import Kingfisher
基础操作
let url = NSURL(string: "http://www.51work6.com/service/download.php?email=scuxiatian@foxmail.com&FileName=test1.jpg")!;//打开该url地址的图片imageView.kf_setImageWithURL(url)//如果打开失败,打开placeholderImage参数的图片imageView.kf_setImageWithURL(url, placeholderImage: UIImage(named: "sps.png"))//打开资源中的图片,如果本地缓存中没有,将从url地址下载,以关键字"MyImage"保存起来,以便下次使用let resource = Resource(downloadURL: url, cacheKey: "MyImage");imageView.kf_setImageWithResource(resource);
运行效果如下:
使用optionsInfo参数
//强制刷新,无论图片是否已在缓存中,到从url地址重新下载imageView.kf_setImageWithURL(url, placeholderImage: nil, optionsInfo: [.ForceRefresh])//自定义关键字为"MyImage"的ImageCachelet myCache = ImageCache(name: "MyImage");//将打开图片存入指定关键字的缓存中,而不是默认缓存imageView.kf_setImageWithURL(url, placeholderImage: nil, optionsInfo: [.TargetCache(myCache)])//图片以淡入方式出现,动画持续1秒imageView.kf_setImageWithURL(url, placeholderImage: nil, optionsInfo: [.Transition(ImageTransition.Fade(1))])//optionsInfo参数可以同时接受多个条件imageView.kf_setImageWithURL(url, placeholderImage: nil, optionsInfo: [.ForceRefresh,.TargetCache(myCache),.Transition(ImageTransition.Fade(1))])
回调函数
imageView.kf_setImageWithURL(url, placeholderImage: nil, optionsInfo: nil, //进度回调函数progressBlock: { (receivedSize, totalSize) inprint(receivedSize / totalSize)//完成回调函数{ (image, error, cacheType, imageURL) inprint("complete")}
取消任务
如果下载的图片不再使用可以停止任务,多用于tableView和collectionview中的cell,当图片还没下载完成时,用户就滑动界面导致cell消失的情况。
imageView.kf_setImageWithURL(url)//停止图片的取回imageView.kf_cancelDownloadTask();
也可以利用kf_setImageWithURL函数的返回值(类型为RetrieveImageTask)来进行更多的管理操作
let task = imageView.kf_setImageWithURL(url)//取消任务task.cancel();
下载器
自定义下载器参数
//获取下载器let downloader = KingfisherManager.sharedManager.downloader//设置超时时间,默认为15妙downloader.downloadTimeout = 5//requestModifier中的内容会在下载之前开始执行downloader.requestModifier = {(request: NSMutableURLRequest) inself.imageView.image = UIImage(named: "sps.png")}//设置信任hostdownloader.trustedHosts = Set(["httpbin.org"])
缓存系统
自定义缓存参数
//获取缓存let cache = KingfisherManager.sharedManager.cache//设置最大磁盘缓存为50Mb,默认为无限制cache.maxDiskCacheSize = 50 * 1024 * 1024//设置最大缓存时间为1天,默认为1周cache.maxCachePeriodInSecond = 60 * 60 * 24//计算缓存占用的磁盘大小cache.calculateDiskCacheSizeWithCompletionHandler { (size) inprint(size)}//清空存储器缓存cache.clearMemoryCache()//清空磁盘缓存cache.clearDiskCache()//清空失效和过大的缓存cache.cleanExpiredDiskCache()
预取
将一些图片在显示到屏幕上之前,先预取到缓存。主要用于当你可以预知接下来会用到图片资源时,避免多次请求。
let urlString1 = "http://www.51work6.com/service/download.php?email=scuxiatian@foxmail.com&FileName=test1.jpg"let urlString2 = "http://www.51work6.com/service/download.php?email=scuxiatian@foxmail.com&FileName=test2.jpg"let urls = [urlString1,urlString2].map{NSURL(string: $0 )!}let prefetcher = ImagePrefetcher(urls: urls, optionsInfo: nil, progressBlock: nil) { (skippedResources, failedResources, completedResources) inprint("These resources are prefetched:\(completedResources)")}//开始预取,预取成功的图片处理方式跟ImageCache中缓存的图片一样prefetcher.start()//停止预取prefetcher.stop()
动态图片
加载动态图片只需要加上一行代码,设置imageView为AnimatedImageView,不设置也能加载,但是在动态图片较大的时候推荐进行该设置。
imageView = AnimatedImageView()imageView.kf_setImageWithURL(url)
swift_035(Swift之第三方库Kingfisher篇)相关推荐
- swift_036(Swift之第三方库SwiftyJSON篇)
[快速学会Swift第三方库] SwiftyJSON篇 SwiftyJSON使得用Swift处理JSON数据更加容易.这是解析JSON字符串封装类.实现功能与JavaScript中的JSON.pars ...
- Swift 必备开发库 (高级篇)
1.CryptoSwift swift加密库, 支持md5,sha1,sha224,sha256... github地址: https://github.com/krzyzanowskim/Crypt ...
- React Native之常用第三方库
前言 React Native出来一年多了,受到各大开发人员的喜爱,但是由于只是专注于View层的开发,因此在很多深层次上还需要结合原生app做一定的兼容,还有就是现在好多控件,如Android中已是 ...
- swift_033(Swift 必备和常用第三方库以及pod使用)
1.swift工程 使用pod 有了OC中使用pod管理第三方库的经验,在swift中使用pod来管理第三方库就很容易了. 第一步:cd的工程文件夹下 第二步:pod init 为项目创建一个PodF ...
- 项目常用第三方库 Swift版
第三方库对应的Swift版本 AFNetworking -> Alamofire 21570 支持Carthage ShareSDK,支付宝SDK,微信SDK(第三方支付,分享,登录) -> ...
- swift导入oc第三方库
swift导入oc第三方库 前言 对于ios开发而言,目前很多第三方库或者demo还是以oc为主,swift相关的资料很少,这篇文章就结合博主的开发实例对在swift工程中导入并使用oc版本的第三方库 ...
- swift -- 单例+ lazy懒加载 + 第三方库
//工具类单例 static let goods : NHGoods = { let good = NHGoods() return good }() //懒加载 lazy var registerB ...
- 性能优化:swift三方库Kingfisher图片加载库属性maxMemoryCost失效原因分析
Kingfisher是我们swift开发中非常常见的第三方库,因为在实际项目中,在设置maxMemoryCost中观察到内存增长到我们设置的数据时maxMemoryCost并没有进行很好的工作,因此针 ...
- Swift项目引入第三方库的方法
分类: iOS(55) 目录(?)[+] Swift项目引入第三方库的方法 转自 http://blog.shiqichan.com/How-To-Import-3rd-Lib-Into-Swif ...
最新文章
- python爬虫技术可以干什么-Python实战:网络爬虫都能干什么?
- mysql 类型_MySQL-约束类型
- 什么是长连接和短连接?(长链接、短链接)什么时候使用长连接、短链接?
- 【Python】扫盲帖:关于在Windows、Linux和Mac上安装设置Python的问题
- Nodejs实现WebSocket通信demo
- epoll实现压测工具
- 从Javascript单线程谈Event Loop
- iOS项目开发实战——制作视图的缩放动画
- Linux下启动Oracle数据库
- 【数学建模】基于matlab模糊二元决策树【含Matlab源码 038期】
- Magnific Popup – 免费的响应式 jQuery Lightbox 插件
- 2021-08-01 武大账号访问知网
- 3、男人长得丑,除了知识还需要些什么?
- 服务器机柜可放多大显示器,一个标准服务器机柜究竟能够放多少服务器
- CS1526号错误是什么
- PC微信更改文件默认保存位置后聊天记录丢失
- webpack基础篇(三):管理资源(image、css、fonts、csv、json5)
- 任务栏WPS出现多窗口预览?下载这个注册表就对了
- 基于R语言的主成分回归(PCR)与Lasso回归在水稻基因组预测中的对比(生信数基实验作业)
- java 的新浪oauth_新浪微博OAuth授权的Java实现
热门文章
- Python 进阶之路 (九) 再立Flag, 社区最全的itertools深度解析(上)
- zookeeper3.4集群搭建
- 基本的try-cathc-finally异常处理
- Groovy安装与入门实例
- 如何在自己的信息管理系统里集成第三方权限控制组件 - 设计一个漂亮的WEB界面...
- MyBatis源码流程分析
- jquery的attr和prop区别之实例
- spoj Balanced Numbers(数位dp)
- POJ 2236 Wireless Network 并查集
- Cydia for Android2