Kingfisher swift by onevcat

Kingfisher (中文名:翠鸟) 是一个异步下载和缓存图片的库,SDWebImage的Swift实现版。

https://github.com/onevcat/Kingfisher

最基本的使用方法:

import Kingfisher

imageView.kf_setImageWithURL(NSURL(string:"http://your_image_url.png")!)

下载时可以设置默认图片

imageView.kf_setImageWithURL(NSURL(string:"http://your_image_url.png")!, placeholderImage:nil)

在默认情况下,Kingfisher使用url当做cache的key。 你也可以自定义这个key 。

let URL=NSURL(string:"http://your_image_url.png")!

let resource  =Resource(downloadURL:URL,cacheKey:"your_customized_key")imageView.kf_setImageWithResource(resource)

在首次使用时,可能会有出现问题:Application Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure.

原因:苹果将原http协议改成了https协议,使用 TLS1.2 SSL加密请求数据。

解决办法:

在info.plist中添加

NSAppTransportSecurity

NSAllowsArbitraryLoads

Options

Kingfisher默认会从cache或者disk中找原图,如果没有找到才去网络上下载,你也可以设置选项强制刷新,忽略已缓存的图片

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

还有一些其他的选项控制缓存等级的,这些可以看文档

你还可以自定义缓存替换默认的。

letmyCache=ImageCache(name:"my_cache")imageView.kf_setImageWithURL(NSURL(string:"your_image_url")!,                        placeholderImage:nil,                              optionsInfo: [.TargetCache(myCache)])

这一般是你想使用某个指定缓存时使用

如果你需要在1s淡入图像视图(只适用于iOS平台):

imageView.kf_setImageWithURL(NSURL(string: "your_image_url")!,

placeholderImage: nil,

optionsInfo: [.Transition(ImageTransition.Fade(1))])

你也可以自由组合这些选项来定制行为:

letqueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)letoptionInfo: KingfisherOptionsInfo=[.ForceRefresh,.DownloadPriority(0.5),.CallbackDispatchQueue(queue),.Transition(ImageTransition.Fade(1))]

For more information about options, please see theKingfisherOptionsInfoin thedocumentation.

Callbacks

下载时(获取进度)或者下载完成(某些通知)需要做某些事情,这些可以写在回调中

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

Cancel Task

你可以取消下载任务,特别是在table view 或者 collection view使用时很有用(在下载未完成滑动离开时取消任务)

imageView.kf_setImageWithURL(NSURL(string:"http://your_image_url.png")!)// The image retrieving will stop.imageView.kf_cancelDownloadTask()

如果你需要做更多事情,kf_setImageWithURL方法返回RetrieveImageTask对象,你可以调用其cancel方法取消下载任务

lettask=imageView.kf_setImageWithURL(NSURL(string:"http://your_image_url.png")!)leturlShouldNotBeCancelled: URL=...iftask.downloadTask?.URL!=urlShouldNotBeCancelled {    task.cancel()}

Downloader & Cache system

Kingfisher采用默认的Downloader和Cache参数,可以通过KingfisherManager.sharedManager.downloader和KingfisherManager.sharedManager.cache对其参数进行设置。

letdownloader=KingfisherManager.sharedManager.downloader// Download process will timeout after 5 seconds. Default is 15.downloader.downloadTimeout=5// requestModifier will be called before image download request made.downloader.requestModifier={    (request: NSMutableURLRequest)in// Do what you need to modify the download request. Maybe add your HTTP basic authentication for example.}// Hosts in trustedHosts will be ignore the received challenge.// You can add the host of your self-signed site to it to bypass the SSL.// (Do not do it unless you know what you are doing)downloader.trustedHosts=Set(["your_self_signed_host"])

letcache=KingfisherManager.sharedManager.cache// Set max disk cache to 50 mb. Default is no limit.cache.maxDiskCacheSize=50*1024*1024// Set max disk cache to duration to 3 days, Default is 1 week.cache.maxCachePeriodInSecond=60*60*24*3// Get the disk size taken by the cache.cache.calculateDiskCacheSizeWithCompletionHandler { (size)->()inprint("disk size in bytes:\(size)")}

内存cache在收到memory warning时会自动清除,disk cache也会在条件满足时被清除,当然你也可以手动调用方法进行清除

// Clear memory cache right away.cache.clearMemoryCache()// Clear disk cache. This is an async operation.cache.clearDiskCache()// Clean expired or size exceeded disk cache. This is an async operation.cache.cleanExpiredDiskCache()

Prefetching

还有一个预取功能:就是在展示图片前,提前获取一些图像和缓存,不必在真正使用的时候再去请求数据,这样有利于提高用户体验

leturls=["http://example.com/image1.jpg","http://example.com/image2.jpg"].map{ NSURL(string: $0)!}letprefetcher=ImagePrefetcher(urls: urls, optionsInfo:nil, progressBlock:nil, completionHandler: {    (skippedResources, failedResources, completedResources)->()inprint("These resources are prefetched:\(completedResources)")})prefetcher.start()

你可以随时取消该功能

prefetcher.stop()

预取之后,你可以使用Kingfisher的方法展示图片

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容