这篇文章翻译自https://github.com/rs/SDWebImage 。目前,虽然AFNetworking也提供了图片下载及缓存策略,但更专业的时候,图片加载框架一般用SDWebImage,正如主流APP(如QQ和微信)会用到。当然,只看官方文档是不够的,需要进一步查阅源代码方能理解SDWebImage的功能。
该库提供了具有缓存支持的异步图像下载器。为方便起见,我们为UI元素例如UIImageView,UIButton,MKAnnotationView等类添加了categories。
pod try SDWebImage
找出谁使用SDWebImage并将您的应用程序添加到列表中。
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"))
pod 'SDWebImage/GIF' Cocapods
到您的podfile。UITableView根据单元格的第一个图像集,确定图像的大小尺寸。如果远程图像的尺寸与占位符图像的大小不同,您可能会遇到奇怪的变形缩放问题。以下文章提供了解决此问题的方法:http://www.wrichards.com/blog/2011/11/sdwebimage-fixed-width-cell-images/
默认情况下,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];
在你调用sd_setImageWithURL
之前,添加代码如下:
[imageView sd_setShowActivityIndicatorView:YES];
[imageView sd_setIndicatorStyle:UIActivityIndicatorViewStyleGray];
imageView.sd_setShowActivityIndicatorView(true)
imageView.sd_setIndicatorStyle(.Gray)
在您的项目中使用SDWebImage有三种方法:
CocoaPods是Objective-C的依赖管理器,它可以自动化并简化在项目中使用第三方库的过程。有关详细信息,请参阅“ 入门” 部分。
platform :ios, '7.0'
pod 'SDWebImage', '~>3.8'
如果您使用Swift,请确保添加use_frameworks!并将目标设置为iOS 8+:
platform :ios, '8.0'
use_frameworks!
现在有4个可以的子模块:Core
,MapKit
,GIF
和WebP
(这意味着你只能安装部分SDWebImage模块。默认情况下,你只会得到Core
,所以如果你需要WebP
,你需要指定它)。
Podfile示例:
pod 'SDWebImage/WebP'
Carthage是Swift和Objective-C的轻量级依赖管理员。它利用CocoaTouch模块,并且比CocoaPods的侵入性更小。
Cartfile
github "rs/SDWebImage"
请参阅手动安装
在需要使用库的源文件中,导入头文件:
#import <SDWebImage/UIImageView+WebCache.h>
到这里,您的workspace应该能没有错误地被构建。如果您遇到问题,请发邮件到社区可以帮助您解决问题。
所有源代码均获得MIT许可证许可。