SDWebImage

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

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

  • 简单下载图片
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
 方式一:
     // 只下载图片
    [self.imageView sd_setImageWithURL:@"URL地址"]];

 方式二:
     /**
     第一个参数:图片的url
     第二个参数:占位图片
     */
    [self.imageView sd_setImageWithURL:[NSURL URLWithString:@"URL地址"]
                      placeholderImage:[UIImage imageNamed: @"占位图片名"]];
  • 下载成功或失败之后做的事情
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
方式一:
     /**
     第一个参数:图片的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 中的选项
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
     /**
     //失败后重试
     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 下载图片
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
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 下载图片
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
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;
                                    }
                                }];
  • 内存警告时调用
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// 当程序收到内存警告时会调用这个方法
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // 清除缓存
    [[SDWebImageManager sharedManager].imageCache clearDisk]; // clean:删除过期缓存
    [[SDWebImageManager sharedManager].imageCache cleanDisk]; // clear:直接删除然后重新创建
    // 取消下载
    [[SDWebImageManager sharedManager] cancelAll];

}
  • 其它一些很有用的方法
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 取消掉当前所有的下载
- (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 的一些用法总结,以后再用到其它的了,会再来补充。另外如果有写错的地方,欢迎朋友们指正!谢谢😊!