SDWebImage下载图片
1.快速使用
#import
包含头文件,或者放在pch文件里
初始化一个UIImageView之后;
//默认会从缓存取,没有在从网络加载
[self.imageView sd_setImageWithURL:self.imageUrl placeholderImage:nil options:SDWebImageProgressiveLoad context:nil progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
NSLog(@"%lu",receivedSize/expectedSize);//进度
} completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
if (image){
//完成之后对图片的处理
}
}];
/*参数依次是
1.图片的url
2.默认图片
3.选项SDWebImageOptions
4.context
5.下载进度
6.完成block
*/
主要是这个方法,其他的都是对这个的分装
- (void)sd_setImageWithURL:(nullable NSURL *)url {
[self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil];
}
- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder {
[self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil];
}
- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options {
[self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil];
}
- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context {
[self sd_setImageWithURL:url placeholderImage:placeholder options:options context:context progress:nil completed:nil];
}
- (void)sd_setImageWithURL:(nullable NSURL *)url completed:(nullable SDExternalCompletionBlock)completedBlock {
[self sd_setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:completedBlock];
}
- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder completed:(nullable SDExternalCompletionBlock)completedBlock {
[self sd_setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:completedBlock];
}
- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options completed:(nullable SDExternalCompletionBlock)completedBlock {
[self sd_setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:completedBlock];
}
- (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options progress:(nullable SDImageLoaderProgressBlock)progressBlock completed:(nullable SDExternalCompletionBlock)completedBlock {
[self sd_setImageWithURL:url placeholderImage:placeholder options:options context:nil progress:progressBlock completed:completedBlock];
}
2. SDWebImageManager
SDWebImageManager是管理整个框架的类
@property (nonatomic, class, readonly, nonnull) SDWebImageManager *sharedManager;
属性里面的class关键字,会生产+开头的get,set方法,但是没有实例变量。上面代码有readonly修饰,就只有get方法
下面这两行代码结果是一样的(.语法本质就是调用该属性的get方法)
用sharedManager属性,会产生SDWebImage默认的单例
SDWebImageManager.sharedManager
[SDWebImageManager sharedManager]
自定义初始化
//默认会从缓存取,没有在从网络加载
- (nonnull instancetype)initWithCache:(nonnull id)cache loader:(nonnull id)loader;
下载图片
- (SDWebImageCombinedOperation *)loadImageWithURL:(nullable NSURL *)url
options:(SDWebImageOptions)options
context:(nullable SDWebImageContext *)context
progress:(nullable SDImageLoaderProgressBlock)progressBlock
completed:(nonnull SDInternalCompletionBlock)completedBlock
1.参数url 图片的url
2.参数options 选项(枚举后文)
3.参数context
4.progress下载进度block ,(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL)
已下载size,总的size,图片url
5.completed完成block(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL)
图片对象image,(NSData *)data,error错误信息,缓存类型,完成状态,图片url
- (SDWebImageCombinedOperation *)loadImageWithURL:(NSURL *)url
options:(SDWebImageOptions)options
progress:(SDImageLoaderProgressBlock)progressBlock
completed:(SDInternalCompletionBlock)completedBlock
是对第一个方法的封装
- (void)cancelAll;
取消所有下载任务
[SDWebImageManager.sharedManager cancelAll];
SDWebImageOptions枚举
SDWebImageRetryFailed
如果下载失败,url不会被加入黑名单,SDWebImage还是会再次尝试下载
SDWebImageLowPriority
在你交互的时候(手指还在滑动屏幕)图片不会下载,交互完了(手机离开屏幕)就会下载
SDWebImageProgressiveLoad
边下载边显示图片,直到下载完成全部显示
SDWebImageRefreshCached
一个图片缓存了,还是会重新请求.并且缓存侧略依据NSURLCache而不是SDWebImageCache
SDWebImageContinueInBackground
在后台下载
SDWebImageHandleCookies
可以控制存在NSHTTPCookieStore的cookies.
SDWebImageAllowInvalidSSLCertificates
允许不安全的SSL证书
SDWebImageHighPriority
默认情况下,image在装载的时候是按照他们在队列中的顺序装载的(就是先进先出).这个flag会把他们移动到队列的前端,并且立刻装载,而不是等到当前队列装载的时候再装载.
SDWebImageDelayPlaceholder
默认情况下,占位图会在图片下载的时候显示.这个flag开启会延迟占位图显示的时间,等到图片下载完成之后才会显示占位图.
SDWebImageTransformAnimatedImage
SDWebImageAvoidAutoSetImage
默认情况下,图片是在下载完成后加载到图片视图。但是在一些情况下,我们想要在设置图片之前进行图片处理(比如,提供一个过滤或添加一个折叠动画)。使用这个标志,如果你想在下载成功后在完成块中手动设置图片。
SDWebImageScaleDownLargeImages
默认情况下,图片解码为原始的大小。在iOS,这个标志会把图片缩小到与设备的受限内容相兼容的大小。如果设置了SDWebImageProgressDownload标志,那么缩小被设置为无效。
SDWebImageQueryMemoryData
默认情况下,当图像已经缓存到内存中时,我们不会查询图像数据。该掩码可以强制同时查询图像数据。但是,除非指定“SDWebImageQueryMemoryDataSync”,否则此查询是异步的。
SDWebImageQueryMemoryDataSync
默认情况下,当您只指定“SDWebImageQueryMemoryData”时,我们异步地查询内存图像数据。结合该掩码还可以同步查询内存图像数据。
SDWebImageQueryDiskDataSync
默认情况下,当内存缓存丢失时,我们异步地查询磁盘缓存。这个掩码可以强制同步查询磁盘缓存(当内存缓存丢失时)。
SDWebImageFromCacheOnly
默认情况下,当缓存丢失时,映像将从加载器加载。此标志仅能防止从缓存加载。
SDWebImageFromLoaderOnly
和上一个相反, 默认情况下,我们在从加载器加载映像之前查询缓存。此标志仅能阻止从加载器加载。
SDWebImageForceTransition
默认情况下,当您使用“SDWebImageTransition”在图像加载完成后进行一些视图转换时,此转换仅应用于从网络下载图像。这个掩码还可以强制为内存和磁盘缓存应用视图转换。
SDWebImageAvoidDecodeImage
默认情况下,我们将在缓存查询和从网络下载时解码后台图像。这有助于提高性能,因为在屏幕上呈现图像时,首先需要解码。但这发生在Core Animation的主队列上。
然而,这个过程也可能增加内存使用量。如果您正在经历一个问题,由于过多的内存消耗,这个标志可以防止解码图像。
SDWebImageDecodeFirstFrameOnly
默认情况下,我们解码动画图像。此标志仅能强制解码第一帧并生成静态图像。
SDWebImagePreloadAllFrames
默认情况下,对于“SDAnimatedImage”,我们在渲染时解码动画图像帧,以减少内存使用。但是,当大量imageViews共享动画图像时,可以指定将所有帧预加载到内存中,以减少CPU使用。这将在后台队列中触发“preloadAllAnimatedImageFrames”(仅限磁盘缓存和下载)。
3.使用SDWebImageDownloader
SDWebImageDownloader *download=[SDWebImageDownloader sharedDownloader];
不会缓存图片,如果要想缓存需要手动缓存
[download downloadImageWithURL:self.imageUrl options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
} completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, BOOL finished) {
}];