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 图示

image


三、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 图示

image


四、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 图示

image


原创粉丝点击