[快速学会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篇)相关推荐

  1. swift_036(Swift之第三方库SwiftyJSON篇)

    [快速学会Swift第三方库] SwiftyJSON篇 SwiftyJSON使得用Swift处理JSON数据更加容易.这是解析JSON字符串封装类.实现功能与JavaScript中的JSON.pars ...

  2. Swift 必备开发库 (高级篇)

    1.CryptoSwift swift加密库, 支持md5,sha1,sha224,sha256... github地址: https://github.com/krzyzanowskim/Crypt ...

  3. React Native之常用第三方库

    前言 React Native出来一年多了,受到各大开发人员的喜爱,但是由于只是专注于View层的开发,因此在很多深层次上还需要结合原生app做一定的兼容,还有就是现在好多控件,如Android中已是 ...

  4. swift_033(Swift 必备和常用第三方库以及pod使用)

    1.swift工程 使用pod 有了OC中使用pod管理第三方库的经验,在swift中使用pod来管理第三方库就很容易了. 第一步:cd的工程文件夹下 第二步:pod init 为项目创建一个PodF ...

  5. 项目常用第三方库 Swift版

    第三方库对应的Swift版本 AFNetworking -> Alamofire 21570 支持Carthage ShareSDK,支付宝SDK,微信SDK(第三方支付,分享,登录) -> ...

  6. swift导入oc第三方库

    swift导入oc第三方库 前言 对于ios开发而言,目前很多第三方库或者demo还是以oc为主,swift相关的资料很少,这篇文章就结合博主的开发实例对在swift工程中导入并使用oc版本的第三方库 ...

  7. swift -- 单例+ lazy懒加载 + 第三方库

    //工具类单例 static let goods : NHGoods = { let good = NHGoods() return good }() //懒加载 lazy var registerB ...

  8. 性能优化:swift三方库Kingfisher图片加载库属性maxMemoryCost失效原因分析

    Kingfisher是我们swift开发中非常常见的第三方库,因为在实际项目中,在设置maxMemoryCost中观察到内存增长到我们设置的数据时maxMemoryCost并没有进行很好的工作,因此针 ...

  9. Swift项目引入第三方库的方法

     分类: iOS(55)  目录(?)[+] Swift项目引入第三方库的方法 转自 http://blog.shiqichan.com/How-To-Import-3rd-Lib-Into-Swif ...

最新文章

  1. python爬虫技术可以干什么-Python实战:网络爬虫都能干什么?
  2. mysql 类型_MySQL-约束类型
  3. 什么是长连接和短连接?(长链接、短链接)什么时候使用长连接、短链接?
  4. 【Python】扫盲帖:关于在Windows、Linux和Mac上安装设置Python的问题
  5. Nodejs实现WebSocket通信demo
  6. epoll实现压测工具
  7. 从Javascript单线程谈Event Loop
  8. iOS项目开发实战——制作视图的缩放动画
  9. Linux下启动Oracle数据库
  10. 【数学建模】基于matlab模糊二元决策树【含Matlab源码 038期】
  11. Magnific Popup – 免费的响应式 jQuery Lightbox 插件
  12. 2021-08-01 武大账号访问知网
  13. 3、男人长得丑,除了知识还需要些什么?
  14. 服务器机柜可放多大显示器,一个标准服务器机柜究竟能够放多少服务器
  15. CS1526号错误是什么
  16. PC微信更改文件默认保存位置后聊天记录丢失
  17. webpack基础篇(三):管理资源(image、css、fonts、csv、json5)
  18. 任务栏WPS出现多窗口预览?下载这个注册表就对了
  19. 基于R语言的主成分回归(PCR)与Lasso回归在水稻基因组预测中的对比(生信数基实验作业)
  20. java 的新浪oauth_新浪微博OAuth授权的Java实现

热门文章

  1. Python 进阶之路 (九) 再立Flag, 社区最全的itertools深度解析(上)
  2. zookeeper3.4集群搭建
  3. 基本的try-cathc-finally异常处理
  4. Groovy安装与入门实例
  5. 如何在自己的信息管理系统里集成第三方权限控制组件 - 设计一个漂亮的WEB界面...
  6. MyBatis源码流程分析
  7. jquery的attr和prop区别之实例
  8. spoj Balanced Numbers(数位dp)
  9. POJ 2236 Wireless Network 并查集
  10. Cydia for Android2