使用 Kingfisher 处理网络图片的读取与缓存
Kingfisher 是一个读取网络图片和处理本地缓存的开源库,由 onevcat 开发。提到图片缓存库,那么熟悉 Objective-C 开发的同学,可能会想起 SDWebImage。 没错,Kingfisher 除了提供图片的读取和缓存功能,它还是完全使用 Swift 实现的。
安装 Kingfisher
那么,我们就来了解一下 Kingfisher 吧, 它支持 CocoaPods 和 Carthage 包管理,我们可以通过他们来安装。
COCOAPODS 的安装方法:
设置 Podfile:
source 'https://github.com/CocoaPods/Specs.git' |
然后运行命令:
$ 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")! |
使用 Resource 类来进行自定义缓存键值的处理。
- 强制刷新
Kingfisher 在默认情况下,每次读取图片的时候,会先判断本地缓存中是否已经存在,如果存在,就使用本地缓存的图片。当然你也可以强制每次都读取网络,只需要指定一个 Options 参数即可:
imageView.kf_setImageWithURL(NSURL(string: "your_image_url")!, |
Options 参数还有很多应用场景,比如你需要在图片加载出来后,用渐变的方式显示出来:
imageView.kf_setImageWithURL(NSURL(string: "your_image_url")!, |
这里的 Options 参数,就指定了一个1秒钟的渐变显示。
- 回调
当然,还可以在图片加载完成后,指定回调,来进行一些操作:
imageView.kf_setImageWithURL(NSURL(string: "your_image_url")!, |
结语
总之,KingFinsher 是一个非常方便的开源库,并且它是完全使用 Swift 来创建的,极大的而方便了我们处理图片的工作。
关于 KingFinsher 的更多内容,大家可以参看它的 Github 主页:
https://github.com/onevcat/Kingfisher
本文转自swiftcafe
使用 Kingfisher 处理网络图片的读取与缓存的更多相关文章
- OpenGL读取帧缓存数据
https://blog.csdn.net/niu2212035673/article/details/80251949 简述有些时候我们可能需要获取渲染后的图像数据,比较常用的函数是glReadPi ...
- ImageLoader(多线程网络图片加载)+本地缓存 for windowsphone 7
搞了好长一阵子wp,做点好事. C/S手机app中应用最多的是 获取网络图片,缓存到本地,展示图片 本次主要对其中的delay:LowProfileImageLoader进行修改,在获取图片的时候, ...
- 自己定制ListView,上拉刷新和下拉刷新,加载网络图片,并且添加缓存机制。
package com.lixu.listviewrefresh; import java.util.ArrayList; import java.util.HashMap; import java. ...
- Java 实现网络图片的读取与下载
//网络图片的下载,读取与删除 public static void fileDowAndDel(String httpurl){ try { URL url = new URL(httpurl); ...
- 记录一次读取memcache缓存的优化
我们是用mvc做web,大部分数据都用memcache做了缓存 有2台memcache缓存服务器 数据并不大. 某页面响应较慢,大概在4s左右. 页面本身很简单只是显示一个表单. 但是layout相对 ...
- APP 接口开发及读取静态缓存
<?php /** * Description: App 接口 * Create date:2015-10-19 13:36 * Author: zhaoyingnan **/ class Re ...
- laravel读取memcached缓存并做条件查询
public function onlineplayersource() { $res = $_POST['aoData']; $sEcho = 0; $iDisplayStart = 0; // 起 ...
- 使用glReadPixels 读取颜色缓存,深度缓存和模板缓存数据
glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *p ...
- 源码阅读-Kingfisher
最后更新:2018-01-16 使用教程: 官方的链接 使用 Kingfisher 处理网络图片的读取与缓存 1. 开始使用 桥接 KingFisher, 利用 KingfisherCompatibl ...
随机推荐
- BZOJ 2733 [HNOI2012]永无乡 ——线段树 并查集
用并查集维护联通块. 用线段树的合并来合并联通块. 自己YY了一个写法. #include <map> #include <cmath> #include <queue& ...
- java并发框架Executor介绍
Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,Completion ...
- 【CF676D】Theseus and labyrinth(BFS,最短路)
题意:给定一张N*M的地图,每一格都是一个房间,房间之间有门.每个房间可能有四个门,例如>代表右边只有一个门在右边即只能向右走,L代表左边没有门只能除了左其他都可以走等等.现在给出起点和终点,每 ...
- 【MFC】禁用鼠标拖拽标题栏移动窗口
解决方案:重载WM_NCLBUTTONDOWN消息 (1) .h 文件 afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point); (2) . ...
- poj 3281(构图+网络流)
Dining Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14144 Accepted: 6425 Descripti ...
- Java 界面编程【03】事件监听
当你把界面都设计好了,总需要添加相应的执行动作给组件,在JAVA中有相应的时间处理机制,叫做“监听器”,给组件添加相应执行动作的过程叫做“注册”,其中的“监听器”是一个接口,里面包含了相应的执行函数, ...
- (5)DataSet
DataTable赋值给DataSet DataSet ds = new DataSet(); DataTable dt1 = new DataTable(); DataTable dt2 = new ...
- HDU 5212 Code【莫比乌斯反演】
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5212 题意: 给定序列,1≤i,j≤n,求gcd(a[i],a[j])∗(gcd(a[i],a[j] ...
- Codeforces 599E Sandy and Nuts(状压DP)
题目链接 Sandy and Nuts 题意大概就是给出限制条件求出在该限制条件下树的种数. #include <bits/stdc++.h> using namespace std; # ...
- logging模块详解以及常见代码
1.在django中获取客户端IP地址: if 'HTTP_X_FORWARDED_FOR' in request.META: ip = request.META['HTTP_X_FORWARDED_ ...