iOS开发之 - SDWebImage 的使用

SDWebImage

SDWebImage 是一个开源的第三方库,在我们 iOS 开发中用到 SDWebImage 的地方有很多,比如在 tableView 中,在 collectionView 中......不然它也不会高达 16000+ 这么多的 Star 了😄。下面是总结的一些 SDWebImage 相关的具体用法。

首先用 cocoapods 导入 SDWebImage 框架,网上有很多安装以及使用 cocoapods 的教程,在此就不累述了,这篇文章的内容是在导入 SDWebImage 基础之上的,主要是总结了一些 SDWebImage 的具体用法。

  • 简单下载图片
 方式一:
     // 只下载图片
    [self.imageView sd_setImageWithURL:@"URL地址"]];

 方式二:
     /**
     第一个参数:图片的url
     第二个参数:占位图片
     */
    [self.imageView sd_setImageWithURL:[NSURL URLWithString:@"URL地址"]
                      placeholderImage:[UIImage imageNamed: @"占位图片名"]];
  • 下载成功或失败之后做的事情
方式一:
     /**
     第一个参数:图片的url
     block:下载成功或失败之后的回调
     */
[self.imageView sd_setImageWithURL:[NSURL URLWithString:@"URL地址"] 
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
        NSLog(@"下载成功或失败之后的回调");
    }];
方式二:
    /**
     第一个参数:图片的url
     第二个参数:占位图片
     block:下载成功或失败之后的回调
     */
    [self.imageView sd_setImageWithURL:[NSURL URLWithString:@"URL地址"]
                      placeholderImage:[UIImage imageNamed: @"占位图片名"]
                             completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
       NSLog(@"下载成功或失败之后的回调");
 }];
方式三:
    /**
     第一个参数:图片的url
     第二个参数:占位图片
     第三个参数:下载图片的策略
     第四个参数:progress进度
     第五个参数:completed 下载完成之后的回调
     */
    [self.imageView sd_setImageWithURL:[NSURL URLWithString:@"URL地址"]
                      placeholderImage:[UIImage imageNamed: @"占位图片名"]
                               options:SDWebImageRetryFailed
                              progress:^(NSInteger receivedSize, NSInteger expectedSize) {
        NSLog(@"progress进度");
    }
                             completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
        NSLog(@"下载成功或失败之后的回调");
    }];
  • 借用一个方法简单的介绍一下 options 中的选项
     /**
     //失败后重试
     SDWebImageRetryFailed = 1 << 0,
     //UI交互期间开始下载,导致延迟下载比如UIScrollView减速。
     SDWebImageLowPriority = 1 << 1,
     //只进行内存缓存
     SDWebImageCacheMemoryOnly = 1 << 2,
     //这个标志可以渐进式下载,显示的图像是逐步在下载
     SDWebImageProgressiveDownload = 1 << 3,
     //刷新缓存
     SDWebImageRefreshCached = 1 << 4,
     //后台下载
     SDWebImageContinueInBackground = 1 << 5,
     //NSMutableURLRequest.HTTPShouldHandleCookies = YES;
     SDWebImageHandleCookies = 1 << 6,
     //允许使用无效的SSL证书
     //SDWebImageAllowInvalidSSLCertificates = 1 << 7,
     //优先下载
     SDWebImageHighPriority = 1 << 8,
     //延迟占位符
     SDWebImageDelayPlaceholder = 1 << 9,
     //改变动画形象
     SDWebImageTransformAnimatedImage = 1 << 10,
     */
    [self.imageView sd_setImageWithURL:[NSURL URLWithString:@"URL地址"] 
placeholderImage:[UIImage imageNamed: @"占位图片名"] 
options:SDWebImageRetryFailed];
  • 使用 SDWebImageManager 下载图片
SDWebImageManager *imageManager = [SDWebImageManager sharedManager];
    /**
     第一个参数:图片的url
     第二个参数:下载图片的(策略)
     第三个参数:progress进度
     第四个参数:completed 下载完成之后的回调
     */
    [imageManager downloadImageWithURL:[NSURL URLWithString:@"URL地址"]
                               options:SDWebImageRetryFailed
                              progress:^(NSInteger receivedSize, NSInteger expectedSize) {
        NSLog(@"progress进度");
    }
                             completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
        NSLog(@"下载成功或失败之后的回调");
                                 if (image) {
                                     self.image = image;
                                 }
    }];
  • 使用 SDWebImageDownloader 下载图片
SDWebImageDownloader *imageDownloader = [SDWebImageDownloader sharedDownloader];
    /*
     第一个参数:图片的url
     第二个参数:下载图片的策略
     第三个参数:progressBlock 进度
     第四个参数:completedBlock 下载完成之后的回调
     */
    [imageDownloader downloadImageWithURL:[NSURL URLWithString:@"URL地址"]
                                  options:SDWebImageDownloaderLowPriority
                                 progress:^(NSInteger receivedSize, NSInteger expectedSize) {
                                     NSLog(@"progress进度");
                                 }
                                completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
                                    NSLog(@"下载成功或失败之后的回调");
                                    if (image) {
                                        self.image = image;
                                    }
                                }];
  • 内存警告时调用
// 当程序收到内存警告时会调用这个方法
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // 清除缓存
    [[SDWebImageManager sharedManager].imageCache clearDisk]; // clean:删除过期缓存
    [[SDWebImageManager sharedManager].imageCache cleanDisk]; // clear:直接删除然后重新创建
    // 取消下载
    [[SDWebImageManager sharedManager] cancelAll];

}
  • 其它一些很有用的方法
// 取消掉当前所有的下载
- (void)cancelAll;

// 检查是否有图片在下载
- (BOOL)isRunning;

// 将图片存入cache的方法
- (void)saveImageToCache:(UIImage *)image forURL:(NSURL *)url;

// 通过图片的url判断其是否已经存在
- (BOOL)cachedImageExistsForURL:(NSURL *)url;

// 检测一个image是否已经被缓存到磁盘(是否存且仅存在disk里).
- (BOOL)diskImageExistsForURL:(NSURL *)url;

// 如果检测到图片已经被缓存,那么执行回调block
- (void)cachedImageExistsForURL:(NSURL *)url
                     completion:(SDWebImageCheckCacheCompletionBlock)completionBlock;

 // 如果检测到图片已经在磁盘中,那么执行回调block
- (void)diskImageExistsForURL:(NSURL *)url
                   completion:(SDWebImageCheckCacheCompletionBlock)completionBlock;

以上是关于 SDWebImage 的一些用法总结,以后再用到其它的了,会再来补充。另外如果有写错的地方,欢迎朋友们指正!谢谢😊!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容