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

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

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

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

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或更高版本
向后兼容性
  • 对于iOS 5和6,使用3.7.6版本的任何版本
  • 对于iOS <5.0,请使用最后2.0版本。

4. 入门指南


  • 阅读本自述文件
  • 阅读如何使用部分
  • 阅读文档@ CocoaDocs
  • 阅读SDWebImage如何比X更好?
  • 通过从Github下载项目或者使用CocoaPods尝试更简单的方法来尝试这个例子pod try SDWebImage
  • 进入安装步骤
  • 阅读SDWebImage 4.0迁移指南,了解从3.x到4.x的更改

5. 谁使用它


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

6. 交流


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

7. 如何使用


Objective-C:

#import 
...
[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 

10.5 构建工程

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

11. 作者


  • Olivier Poitrey

12. 合作方


  • Konstantinos K.
  • Bogdan Poplauschi
  • Chester Liu

13. 许可证


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

14. 架构图


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

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