iOS学习笔记-125.SDWebImage1——基本使用
来源:互联网 发布:淘宝退款要多久 编辑:程序博客网 时间:2024/06/18 18:10
- SDWebImage1基本使用
- 一说明
- 1 UIImageViewWebCache 中最复杂的方法
- 2 SDWebImageManager 中的方法
- 3 SDWebImageDownloader中的方法
- 二UIImageViewWebCache 中最复杂的方法 示例
- 1 示例代码
- 2 SDWebImageOptions枚举说明
- 3 图示
- 三SDWebImageManager 中的方法 示例
- 1 说明
- 2 示例代码
- 3 图示
- 四SDWebImageDownloader中的方法 示例
- 1 说明
- 2 示例代码
- 3 图示
- 一说明
SDWebImage1——基本使用
一、说明
以下关于源码的注释来自于
文顶顶 的注释。
图片的显示有多个方法,下面我们主要来看看以下的三个方法。
1.1 UIImageView+WebCache 中最复杂的方法
/* * 根据图片的url下载图片并设置到ImageView上面去,占位图片 * 异步下载并缓存 * * @param url 图片的URL * @param placeholder 显示在UIImageView上面的占位图片,直到图片下载完成 * @param options 下载图片的选项。参考SDWebImageOptions的枚举值 * @param progressBlock 下载的进度回调 * @param completedBlock 当操作执行完毕之后的回调。该回调没有返回值 * 第一个参数为请求的图片 * 第二个参数是NSError类型的,如果图片下载成功则error为nil,否则error有值 * 第三个参数是图片缓存的使用情况(内存缓存|沙盒缓存|直接下载) * 第四个参数是图片的URL地址 */- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock;
1.2 SDWebImageManager 中的方法
* 如果URL对应的图像在缓存中不存在,那么就下载指定的图片 ,否则返回缓存的图像 * * @param url 图片的URL地址 * @param options 指定此次请求策略的选项 * @param progressBlock 图片下载进度的回调 * @param completedBlock 操作完成后的回调 * 此参数是必须的,此block没有返回值 * Image:请求的 UIImage,如果出现错误,image参数是nil * error:如果出现错误,则error有值 * cacheType:`SDImageCacheType` 枚举,标示该图像的加载方式 * SDImageCacheTypeNone:从网络下载 * SDImageCacheTypeDisk:从本地缓存加载 * SDImageCacheTypeMemory:从内存缓存加载 * finished:如果图像下载完成则为YES,如果使用 SDWebImageProgressiveDownload 选项,同时只获取到部分图片时,返回 NO * imageURL:图片的URL地址 * * @return SDWebImageOperation对象,应该是SDWebimageDownloaderOperation实例 */- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBloc completed:(SDWebImageCompletionWithFinishedBlock)completedBlock;
1.3 SDWebImageDownloader中的方法
/* * 使用给定的 URL 创建 SDWebImageDownloader 异步下载器实例 * 图像下载完成或者出现错误时会通知代理 * url:要下载的图像 URL * SDWebImageDownloaderOptions:下载选项|策略 * progressBlock:图像下载过程中被重复调用的 block,用来报告下载进度 * completedBlock:图像下载完成后被调用一次的 block * image:如果下载成功,image 参数会被设置 * error:如果出现错误,error 参数会被设置 * finished: 如果没有使用 SDWebImageDownloaderProgressiveDownload,最后一个参数一直是 YES * 如果使用了 SDWebImageDownloaderProgressiveDownload 选项,此 block 会被重复调用 * 1)下载完成前,image 参数是部分图像,finished 参数是 NO * 2)最后一次被调用时,image 参数是完整图像,而 finished 参数是 YES * 3)如果出现错误,那么finished 参数也是 YES * 返回值:可被取消的 SDWebImageOperation */- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url options:(SDWebImageDownloaderOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageDownloaderCompletedBlock)completedBlock;
二、UIImageView+WebCache 中最复杂的方法 示例
2.1 示例代码
/*内存+磁盘缓存*/-(void)download{ NSString *path = @"http://www.qqpk.cn/Article/UploadFiles/201112/20111208140318990.jpg"; //内部也是调用了 download2的方法 /* 第一个参数:下载图片的url地址 第二个参数:占位图片 第三个参数:progress 进度回调 receivedSize:已经下载的数据大小 expectedSize:要下载图片的总大小 第四个参数: image:要下载的图片 error:错误信息 cacheType:缓存类型 imageURL:图片url */ [self.imageView sd_setImageWithURL:[NSURL URLWithString:path] placeholderImage:[UIImage imageNamed:@"image1"] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) { } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { switch (cacheType) { case SDImageCacheTypeNone: NSLog(@"不使用缓存,直接下载"); break; case SDImageCacheTypeDisk: NSLog(@"使用磁盘缓存"); break; case SDImageCacheTypeMemory: NSLog(@"使用内存缓存"); break; } }];}
2.2 SDWebImageOptions枚举说明
//使用位移枚举,通过按位与&按位或|的组合方式传递多个值typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) { /** * 默认情况下,如果一个url在下载的时候失败了,那么这个url会被加入黑名单,不会尝试再次下载。如果使用该参数,则该URL不会被添加到黑名单中。意味着会对下载失败的URL尝试重新下载。 * 此标记取消黑名单 */ SDWebImageRetryFailed = 1 << 0, //失败后尝试重新下载 /** * 默认情况下,在 UI 交互时也会启动图像下载,此标记取消这一特性 * 会推迟到滚动视图停止滚动之后再继续下载 * 备注:NSURLConnection 的网络下载事件监听的运行循环模式是 NSDefaultRunLoopMode */ SDWebImageLowPriority = 1 << 1, //低优先级 /** * 使用该参数,将禁止磁盘缓存,只做内存缓存 */ SDWebImageCacheMemoryOnly = 1 << 2, //只使用内存缓存 /** * 此标记允许渐进式下载,就像浏览器中那样,下载过程中,图像会逐步显示出来 * 默认情况下,图像会在下载完成后一次性显示 */ SDWebImageProgressiveDownload = 1 << 3, //渐进式下载 /** * 遵守 HTPP 响应的缓存控制,如果需要,从远程刷新图像 * 磁盘缓存将由 NSURLCache 处理,而不是 SDWebImage,这会对性能有轻微的影响 * 此选项用于处理URL指向图片发生变化的情况 * 如果缓存的图像被刷新,会调用一次 completion block,并传递最终的图像 */ SDWebImageRefreshCached = 1 << 4, //刷新缓存 /** * 如果系统版本是iOS 4+的,那么当App进入后台后仍然会继续下载图像。 * 这是向系统请求额外的后台时间以保证下载请求完成的 * 如果后台任务过期,请求将会被取消 */ SDWebImageContinueInBackground = 1 << 5, //后台下载 /** * 通过设置,处理保存在 NSHTTPCookieStore 中的 cookies */ SDWebImageHandleCookies = 1 << 6, //处理保存在NSHTTPCookieStore中的cookies /** * 允许不信任的 SSL 证书 * 可以出于测试目的使用,在正式产品中慎用 */ SDWebImageAllowInvalidSSLCertificates = 1 << 7, //允许不信任的 SSL 证书 /** * 默认情况下,图像会按照添加到队列中的顺序被加载,此标记会将它们移动到队列前端被立即加载 * 而不是等待当前队列被加载,因为等待队列加载会需要一段时间 */ SDWebImageHighPriority = 1 << 8, //高优先级(优先下载) /** * 默认情况下,在加载图像时,占位图像已经会被加载。 * 此标记会延迟加载占位图像,直到图像已经完成加载 */ SDWebImageDelayPlaceholder = 1 << 9, //延迟占位图片 /** * 通常不会在可动画的图像上调用transformDownloadedImage代理方法,因为大多数转换代码会破坏动画文件 * 使用此标记尝试转换 */ SDWebImageTransformAnimatedImage = 1 << 10, //转换动画图像 /** * 下载完成后手动设置图片,默认是下载完成后自动放到ImageView上 */ SDWebImageAvoidAutoSetImage = 1 << 11 //手动设置图像};
2.3 图示
三、SDWebImageManager 中的方法 示例
3.1 说明
其实上面我们示例中使用的图片的方法,调用的就是我们接下来用的这个方法。
我们可以看到 UIImageView + WebCache 中有如下代码
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock { .......... // 实例化 SDWebImageOperation 操作 id <SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { //移除UIActivityIndicatorView [wself removeActivityIndicator]; if (!wself) return; //下面block中的操作在主线程中处理 dispatch_main_sync_safe(^{ if (!wself) return; //如果图片下载完成,且传入的下载选项为手动设置图片则直接执行completedBlock回调,并返回 if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock) { completedBlock(image, error, cacheType, url); return; } else if (image) { //否则,如果图片存在,则设置图片到UIImageView上面,并刷新重绘视图 wself.image = image; [wself setNeedsLayout]; } else { //如果没有得到图像 //如果传入的下载选项为延迟显示占位图片,则设置占位图片到UIImageView上面,并刷新重绘视图 if ((options & SDWebImageDelayPlaceholder)) { wself.image = placeholder; [wself setNeedsLayout]; } } if (completedBlock && finished) { completedBlock(image, error, cacheType, url); } }); }]; ........}
3.2 示例代码
/*内存+磁盘缓存*/-(void)download2{ NSString *path = @"http://www.qqpk.cn/Article/UploadFiles/201112/20111208140318387.jpg"; [[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:path] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) { NSLog(@"%f",1.0*receivedSize/expectedSize); } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { switch (cacheType) { case SDImageCacheTypeNone: NSLog(@"不使用缓存,直接下载"); break; case SDImageCacheTypeDisk: NSLog(@"使用磁盘缓存"); break; case SDImageCacheTypeMemory: NSLog(@"使用内存缓存"); break; } self.imageView.image = image; }];}
3.3 图示
四、SDWebImageDownloader中的方法 示例
4.1 说明
我们接下来使用的这个方法,它的 completed 代码块是在子线程中运行的,如果我们要刷新UI需要提交操作到主线程中。
4.2 示例代码
/*不要任何缓存的处理*/-(void)download3{ NSString *path = @"http://www.qqpk.cn/Article/UploadFiles/201112/20111208140318960.jpg"; [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:path] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) { } completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) { //它处于子线程中 NSLog(@"%@",[NSThread currentThread]); [[NSOperationQueue mainQueue] addOperation:[NSBlockOperation blockOperationWithBlock:^{ self.imageView.image = image; }]]; }];}
4.3 图示
阅读全文
1 0
- iOS学习笔记-125.SDWebImage1——基本使用
- iOS学习笔记-039.UISearBar——基本使用
- 控件的基本使用-iOS—UI笔记
- iOS学习笔记-023.UIDatePicker的基本使用
- J2EE学习笔记——JAVABean基本使用
- tensorflow学习笔记(一)——tensorflow基本使用
- iOS—NSURLConnection基本使用
- 6、class的基本使用—ES6学习笔记
- IOS学习 NSURLConnection基本使用
- IOS学习 UICollectionViewLayout基本使用
- IOS学习笔记38——NSJSONSerialization使用
- IOS学习笔记38——NSJSONSerialization使用
- IOS开发学习笔记(四)——使用TableView
- IOS学习笔记38——NSJSONSerialization使用
- iOS学习笔记—— UIPickerView 控件的简单使用
- iOS学习笔记—— UISegmentedControl 控件的简单使用
- iOS学习笔记—— UItableView 控件的简单使用
- iOS学习笔记—— UIActivityIndicatorView 和 UIProgressView 的使用
- 给深度学习入门者的Python快速教程
- 为什么你应该(从现在开始就)写博客
- Giraph中的分区数目计算
- 查找字符串
- 初识spring boot
- iOS学习笔记-125.SDWebImage1——基本使用
- oracle group by ,count,sum 函数 日常使用小知识
- Python学习笔记(八)爬虫基础(正则和编解码)
- Hadoop集群搭建
- VLC框架总结(一)VLC源码及各modules功能介绍
- C语言实现通过日期计算这是一年中的第几天
- QWtplot
- vertical-align无效解决方法
- 快速排序