Kingfisher 是一个读取网络图片和处理本地缓存的开源库,由 onevcat 开发。提到图片缓存库,那么熟悉 Objective-C 开发的同学,可能会想起 SDWebImage。 没错,Kingfisher 除了提供图片的读取和缓存功能,它还是完全使用 Swift 实现的。

安装 Kingfisher

那么,我们就来了解一下 Kingfisher 吧, 它支持 CocoaPods 和 Carthage 包管理,我们可以通过他们来安装。

COCOAPODS 的安装方法:

设置 Podfile

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks! pod 'Kingfisher', '~> 1.7'

然后运行命令:

$ pod install
CARTHAGE 的安装方法:

设置 Cartfile:

github "onevcat/Kingfisher" >= 1.7

然后运行命令:

$ carthage update

关于 CocoaPods 和 Carthage 的使用,可以参看这两篇内容:

当然,如果你不习惯使用包管理,可以进行手动安装,可以直接使用 git 命令将库读取出来:

$ git submodule add https://github.com/onevcat/Kingfisher.git

使用 Kingfisher

Kingfisher 对 UIImageView 做了扩展。 所以我们只需要引入 Kingfisher 库,然后在 UIImageView 的实例上面直接调用即可:

import Kingfisher

imageView.kf_setImageWithURL(NSURL(string: "http://your_image_url.png")!)
  • 指定默认图片

因为 Kingfisher 加载图片的时候是异步操作的,所以在图片读取那段时间中,UIImageView 中是没有图片的,所以我们可以设置一个默认图片:

imageView.kf_setImageWithURL(NSURL(string: "http://your_image_url.png")!, placeholderImage: nil)
  • 自定义缓存机制

关于缓存,默认情况下,KingFisher 使用图片的 url 作为缓存的 key 值,如果你希望设置自己的缓存 key 值机制,还可以这样:

let URL = NSURL(string: "http://your_image_url.png")!
let resource = Resource(downloadURL: URL, cacheKey: "your_customized_key") imageView.kf_setImageWithResource(resource)

使用 Resource 类来进行自定义缓存键值的处理。

  • 强制刷新

Kingfisher 在默认情况下,每次读取图片的时候,会先判断本地缓存中是否已经存在,如果存在,就使用本地缓存的图片。当然你也可以强制每次都读取网络,只需要指定一个 Options 参数即可:

imageView.kf_setImageWithURL(NSURL(string: "your_image_url")!,
placeholderImage: nil,
optionsInfo: [.Options(KingfisherOptions.ForceRefresh))

Options 参数还有很多应用场景,比如你需要在图片加载出来后,用渐变的方式显示出来:

imageView.kf_setImageWithURL(NSURL(string: "your_image_url")!,
placeholderImage: nil,
optionsInfo: [.Transition(ImageTransition.Fade(1)))

这里的 Options 参数,就指定了一个1秒钟的渐变显示。

  • 回调

当然,还可以在图片加载完成后,指定回调,来进行一些操作:

imageView.kf_setImageWithURL(NSURL(string: "your_image_url")!,
placeholderImage: nil,
optionsInfo: nil,
progressBlock: { (receivedSize, totalSize) -> () in
println("Download Progress: \(receivedSize)/\(totalSize)")
},
completionHandler: { (image, error, imageURL) -> () in
println("Downloaded and set!")
}
)

结语

总之,KingFinsher 是一个非常方便的开源库,并且它是完全使用 Swift 来创建的,极大的而方便了我们处理图片的工作。

关于 KingFinsher 的更多内容,大家可以参看它的 Github 主页:

https://github.com/onevcat/Kingfisher

本文转自swiftcafe

使用 Kingfisher 处理网络图片的读取与缓存的更多相关文章

  1. OpenGL读取帧缓存数据

    https://blog.csdn.net/niu2212035673/article/details/80251949 简述有些时候我们可能需要获取渲染后的图像数据,比较常用的函数是glReadPi ...

  2. ImageLoader(多线程网络图片加载)+本地缓存 for windowsphone 7

    搞了好长一阵子wp,做点好事. C/S手机app中应用最多的是  获取网络图片,缓存到本地,展示图片 本次主要对其中的delay:LowProfileImageLoader进行修改,在获取图片的时候, ...

  3. 自己定制ListView,上拉刷新和下拉刷新,加载网络图片,并且添加缓存机制。

    package com.lixu.listviewrefresh; import java.util.ArrayList; import java.util.HashMap; import java. ...

  4. Java 实现网络图片的读取与下载

    //网络图片的下载,读取与删除 public static void fileDowAndDel(String httpurl){ try { URL url = new URL(httpurl); ...

  5. 记录一次读取memcache缓存的优化

    我们是用mvc做web,大部分数据都用memcache做了缓存 有2台memcache缓存服务器 数据并不大. 某页面响应较慢,大概在4s左右. 页面本身很简单只是显示一个表单. 但是layout相对 ...

  6. APP 接口开发及读取静态缓存

    <?php /** * Description: App 接口 * Create date:2015-10-19 13:36 * Author: zhaoyingnan **/ class Re ...

  7. laravel读取memcached缓存并做条件查询

    public function onlineplayersource() { $res = $_POST['aoData']; $sEcho = 0; $iDisplayStart = 0; // 起 ...

  8. 使用glReadPixels 读取颜色缓存,深度缓存和模板缓存数据

    glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *p ...

  9. 源码阅读-Kingfisher

    最后更新:2018-01-16 使用教程: 官方的链接 使用 Kingfisher 处理网络图片的读取与缓存 1. 开始使用 桥接 KingFisher, 利用 KingfisherCompatibl ...

随机推荐

  1. Welcome-to-Swift-06函数(Functions)

    函数是执行特定任务的代码自包含块.给定一个函数名称标识, 当执行其任务时就可以用这个标识来进行"调用". Swift的统一的功能语法足够灵活来表达任何东西,无论是甚至没有参数名称的 ...

  2. manacher-模板-hd-3068

    /* 题意:给一个字符串,求该串的最长回文串的长度: 算法:Manacher O(n)复杂度,求以每一个字符为中心的最长汇文串的长度: 这个算法把奇数和偶数的情况和在一起来考虑了: */ #inclu ...

  3. HDU-2853 Assignment

    求二分最大匹配,但还要尽量接近原匹配... 解决方法:对于N个顶点的二分图,每条边同时乘上一个比N稍微大的数N',然后对于在原匹配的边就都+1. 经过这样处理,求得的答案Ans乘除N'即是原图的最大匹 ...

  4. 【SCOI2003】【BZOJ1092】蜘蛛难题

    有一堆管道,还有一个蜘蛛Willy,如下图所示.所有管道的是上端开口,下端封底,直径都是1cm,连接两个管道的连接容量无限,但体积可以忽略不计. 在第一个管道上方有一个水源,从中有水不断往下流,速度为 ...

  5. jenkins发送html测试报告

    jenkins发送html测试报告  https://blog.csdn.net/galen2016/article/details/77975965/ <!DOCTYPE html> & ...

  6. Linux System Programming 学习笔记(二) 文件I/O

    1.每个Linux进程都有一个最大打开文件数,默认情况下,最大值是1024 文件描述符不仅可以引用普通文件,也可以引用套接字socket,目录,管道(everything is a file) 默认情 ...

  7. 【BZOJ入门3189】 猜数字(数学,搜索)

    Description 味味最近在玩猜数字的游戏,现在她也希望你来玩一下这个游戏.猜数字游戏的规则是这样的,告诉你一个正整数 n(2<=n<=11),然后味味心中会想一个 n 个数字组成的 ...

  8. dedecms--会员信息导出excel表格

    1:在dede/templets下面的member_main.htm,在全选按钮那里添加一个导出excel按钮:代码如下: <a href="toexcel.php" cla ...

  9. hdu 5455(字符串处理)

    Fang Fang Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total S ...

  10. (1)TensorFlow 概要

    TensorFlow:翻译成中文 张量流 计算图:又被称为有向图.数据流图 数据流图用结点和线的有向图来描述数学计算,节点一般用来表示施加的数学操作,也可以用来数据输入起点.输出终点,或者读取写入持久 ...