[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. 架构图


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据和云计算技术

硬盘存储衡量指标

这是我在2013年11月写在博客里面的笔记,翻出来挺有意思。 1 存储衡量指标: 容量:决定因子是硬盘个数,单盘容量 IOPS:决定因子磁盘个数,cach...

35160
来自专栏ionic3+

【组件篇】ionic3均分列等宽高图像显示(下)

那就是它依赖一个addImage(用于添加的仿按钮图像),如果我没有这个东西,逻辑上是不是就不能用了?是的!那为了使得这个组件能更通用些,改造一下:

9230
来自专栏mukekeheart的iOS之旅

iOS学习——tableview中带编辑功能的cell键盘弹出遮挡和收起问题解决

  最近在项目中经常用到UITableView中的cell中带有UITextField或UITextView的情况,然后在这种场景下,当我们点击屏幕较下方的ce...

77780
来自专栏xx_Cc的学习总结专栏

六天完成一个简单iOS App - 第一天

30650
来自专栏青玉伏案

iOS开发针对对Masonry下的FPS优化讨论

今天博客的内容就系统的讨论一下Masonry对FSP的影响,以及如何更好的使用Masonry。如果你对iOS开发足够熟悉的话,那么对Masonry框架应该不陌生...

26960
来自专栏花叔的专栏

教你做个手绘板小程序码

话说上一条群发,我发了一个旅行青蛙相关的图,底部有个手绘的小程序码 ? 有些细心的同学惊奇第发现那个“”手绘“”的小程序码竟然是可以长按识别的,觉得特别神奇。 ...

30340
来自专栏DeveWork

类极客公园火箭发射“返回顶部”jQuery效果(WordPress代码教程)

之前在三篇系列文章《jQuery仿极客公园火箭发射“返回顶部”效果》中已经给出了“仿”的教程,今天分享也是一个火箭发射“返回顶部”的效果,不过这个火箭更加肥胖了...

20360
来自专栏hotqin888的专栏

golang-fullcalendar,engineercms完善日历事件-支持拖曳drop,改变时间resize

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

20820
来自专栏林德熙的博客

win10 uwp 让焦点在点击在页面空白处时回到textbox中

在网上 有一个大神问我这样的问题:在做UWP的项目,怎么能让焦点在点击在页面空白处时回到textbox中? 虽然我的小伙伴认为他这是一个 xy 问题,但是我还是...

11010
来自专栏陈满iOS

iOS小技巧·把子视图控制器的视图添加到父视图控制器

9020

扫码关注云+社区

领取腾讯云代金券