[iOS学习笔记]·第三方网络图片处理框架:SDWebImage(官方文档翻译篇)

这篇文章翻译自https://github.com/rs/SDWebImage 。目前,虽然AFNetworking也提供了图片下载及缓存策略,但更专业的时候,图片加载框架一般用SDWebImage,正如主流APP(如QQ和微信)会用到。当然,只看官方文档是不够的,需要进一步查阅源代码方能理解SDWebImage的功能。

该库提供了具有缓存支持的异步图像下载器。为方便起见,我们为UI元素例如UIImageView,UIButton,MKAnnotationView等类添加了categories。

1. 特征


  • 为UIImageView,UIButton,MKAnnotationView的Categories添加了有关网络图像和高速缓存管理的Categories
  • 异步图像下载器
  • 异步内存+磁盘图像缓存,它具有自动缓存到期处理
  • 后台图像解压缩
  • 保证相同的URL不会被下载多次
  • 保证虚假URLs不会重复重试
  • 保证主线程永远不会被阻止
  • 好的性能!
  • 使用GCD和ARC

2. 支持的图像格式


  • UIImage支持的图像格式(JPEG,PNG,...)包括GIF
  • WebP格式,包括动画WebP(使用WebP subspec)

3. 系统要求


  • iOS 7.0或更高版本
  • tvOS 9.0或更高版本
  • watchOS 2.0或更高版本
  • OS X 10.8或更高版本
  • Xcode 7.3或更高版本
向后兼容性

4. 入门指南


5. 谁使用它


找出谁使用SDWebImage并将您的应用程序添加到列表中。

6. 交流


  • 如果需要帮助,请使用stackoverflow
    (Tag'sdwebimage')
  • 如果你想问一个一般的问题,请使用Stack Overflow
  • 如果您发现错误,请打开一个issue。
  • 如果您有功能请求,请打开一个issue。
  • 如果您想贡献,请提交拉动请求。

7. 如何使用


Objective-C:

#import <SDWebImage/UIImageView+WebCache.h>
...
[imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
             placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
Swift:

import SDWebImage

imageView.sd_setImage(with: URL(string: "http://www.domain.com/path/to/image.jpg"), placeholderImage: UIImage(named: "placeholder.png"))

8. 动画图像(GIF)支持


  • 从4.0版本开始,我们依靠FLAnimatedImage来处理我们的动画图像。
  • 如果您使用cocoapods ,请添加pod 'SDWebImage/GIF' Cocapods到您的podfile。
  • 要使用它,只需确保使用FLAnimatedImageView而不是UIImageView。
  • 注意:仍然有一个向后兼容的功能,所以如果你仍然试图用UIImageView加载一个GIF,它将只显示第一帧作为静态图像。
  • 重要提示:FLAnimatedImage仅适用于iOS平台,因此对于所有其他平台(OS X,tvOS,watchOS),我们将回退到上述的向后兼容性。

9. 常见问题


9.1 UITableViewCell与使用动态图像的大小尺寸

UITableView根据单元格的第一个图像集,确定图像的大小尺寸。如果远程图像的尺寸与占位符图像的大小不同,您可能会遇到奇怪的变形缩放问题。以下文章提供了解决此问题的方法:http://www.wrichards.com/blog/2011/11/sdwebimage-fixed-width-cell-images/

9.2 处理图像刷新

默认情况下,SDWebImage执行非常积极的缓存。它完全无视HTTP服务器返回的各种缓存控制头,并缓存返回的图像且不受时间限制。这意味着您的图像URL是指向永远不会改变的图像的静态网址。如果指向的图像发生变化,则网址的某些部分应当相应更改。

如果您无法控制您正在使用的图像服务器,那么当内容更新时,您可能无法更改该URL。例如,Facebook头像URL就是这种情况。在这种情况下,您可以使用该SDWebImageRefreshCached标志。这将稍微降低性能,但这会重视HTTP缓存控制头:

[imageView sd_setImageWithURL:[NSURL URLWithString:@"https://graph.facebook.com/olivier.poitrey/picture"]
             placeholderImage:[UIImage imageNamed:@"avatar-placeholder.png"]
                      options:SDWebImageRefreshCached];

9.3 添加一个进度指示器

在你调用sd_setImageWithURL之前,添加代码如下:

[imageView sd_setShowActivityIndicatorView:YES];
[imageView sd_setIndicatorStyle:UIActivityIndicatorViewStyleGray];
imageView.sd_setShowActivityIndicatorView(true)
imageView.sd_setIndicatorStyle(.Gray)

10. 安装


在您的项目中使用SDWebImage有三种方法:

  • 使用CocoaPods
  • 使用Carthage
  • 通过将项目复制到您的存储库中

10.1 使用CocoaPods安装

CocoaPods是Objective-C的依赖管理器,它可以自动化并简化在项目中使用第三方库的过程。有关详细信息,请参阅“ 入门”
部分。

10.1.1 Podfile
platform :ios, '7.0'
pod 'SDWebImage', '~>3.8'

如果您使用Swift,请确保添加use_frameworks!并将目标设置为iOS 8+:

platform :ios, '8.0'
use_frameworks!
10.1.2 子模块(subspecs)

现在有4个可以的子模块:CoreMapKitGIFWebP(这意味着你只能安装部分SDWebImage模块。默认情况下,你只会得到Core,所以如果你需要WebP,你需要指定它)。

Podfile示例:

pod 'SDWebImage/WebP'

10.2 使用Carthage安装(iOS 8+)

Carthage是Swift和Objective-C的轻量级依赖管理员。它利用CocoaTouch模块,并且比CocoaPods的侵入性更小。

要安装Carthage,请遵循Carthage的说明

Cartfile

github "rs/SDWebImage"

10.3 通过克隆仓库安装

请参阅手动安装

10.4 导入源文件中的headers

在需要使用库的源文件中,导入头文件:

#import <SDWebImage/UIImageView+WebCache.h>

10.5 构建工程

到这里,您的workspace应该能没有错误地被构建。如果您遇到问题,请发邮件到社区可以帮助您解决问题。

11. 作者


12. 合作方


13. 许可证


所有源代码均获得MIT许可证许可

14. 架构图


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

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,943评论 4 60
  • 嗯哼嗯哼蹦擦擦~~~ 转载自:https://github.com/Tim9Liu9/TimLiu-iOS 目录 ...
    philiha阅读 4,794评论 0 6
  • 恩,因为有的时候控制一长串灯珠,但是如果写代码一个一个控制的话又太复杂了,所以我觉得应该有现成的解决方案就是像fi...
    剑山阅读 2,518评论 0 51
  • Vue做一个GitHub项目排行榜 GitHub不同语言热门项目排行,Vue做页面展示。 源代码 源代码地址:🔗 ...
    488a74c3bb61阅读 2,052评论 0 6
  • 出发的这天风和日丽,老爸步行送我们直到高速路口。 入住的酒店有升旗的时间表,距离天安门很近,方便第二天早起。 天气...
    小镇斜阳阅读 154评论 0 0