在巨人的肩膀上(利用SDWebImage库再封装)
2017-11-20 17:00
323 查看
其实SDWebImage已经封装的非常之好了,但是如果你的客户端有特殊需求的话就需要根据自己的需求做一个定制化的方案。今天我就是有个特殊需求,根据当前网络和用户设置需求去网络下载大图还是小图。
接下来开始正题,首先既然我们是根据当前网络去下载的图片,那么我们就需要检测当前网络的状态,这个可以自己写代码,当然也可以继续在“巨人的肩膀”上去寻找现成的类库。
我们的项目中一般都会导入网络请求的库AFNetWork,而这个库中就有一个
获取网络状态的代码如下:
就是这么简单。
然后我们可以根据这个
以上就是根据网络状态和用户设置去判断下载大图还是小图。
当然你也可以自己在外面重新包装一层,就是看cache或者disk里面有没有需要的图片,但是这样的代码没什么用处,因为
最后写一下自己的封装方法:
以上方法就是我自定义的方法里面的实现代码。
接下来开始正题,首先既然我们是根据当前网络去下载的图片,那么我们就需要检测当前网络的状态,这个可以自己写代码,当然也可以继续在“巨人的肩膀”上去寻找现成的类库。
我们的项目中一般都会导入网络请求的库AFNetWork,而这个库中就有一个
AFNetworkReachabilityStatus来表示网络状态的库,我们就用这个去获取到当前网络的状态区分下载大图还是小图。
获取网络状态的代码如下:
AFNetworkReachabilityStatus status = [AFNetworkReachabilityManager sharedManager].networkReachabilityStatus;
就是这么简单。
然后我们可以根据这个
status去写使用哪种图片。详细逻辑如下:
if (status == AFNetworkReachabilityStatusReachableViaWiFi) { NSLog(@"当前是wifi,赶紧去下载大图片啊!"); [currentImage sd_setImageWithURL:[NSURL URLWithString:bigImageUrl] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { NSLog(@"给当前图片下载并展示出来。"); }]; } else if (status == AFNetworkReachabilityStatusReachableViaWWAN) { NSLog(@"这是3G/4G网,看情况下载大图还是小图"); BOOL alwaysLoadBigImage = YES;//这个可以用 [[NSUserDefaults standardUserDefaults]boolForKey:@"用户选择的下载风格"]; if (alwaysLoadBigImage) { NSLog(@"用户设置的总是下载大图"); [currentImage sd_setImageWithURL:[NSURL URLWithString:bigImageUrl] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { NSLog(@"给当前图片下载并展示出来。"); }]; } else if (alwaysLoadBigImage) { NSLog(@"用户设置的下载小图"); [currentImage sd_setImageWithURL:[NSURL URLWithString:smallImageUrl] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { NSLog(@"给当前图片下载并展示出来。"); }]; } else { NSLog(@"当前没网,只能显示holderimage了。"); [currentImage setImage:[UIImage imageNamed:holderImage]]; } }
以上就是根据网络状态和用户设置去判断下载大图还是小图。
当然你也可以自己在外面重新包装一层,就是看cache或者disk里面有没有需要的图片,但是这样的代码没什么用处,因为
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock已经有了这样的判断,这就是SDWebImage的内部实现机制。所以我自己也就不需要再去写一层封装了。
最后写一下自己的封装方法:
-(void)QFSDWebImageOriginImage:(NSString*)bigImageUrl thumbImage:(NSString*)smallImageUrl PlaceholderImage:(NSString*)holderImage withBlock:(SDWebImageCompletionBlock)completedBlock
以上方法就是我自定义的方法里面的实现代码。
相关文章推荐
- 两种利用GCD实现分步获取结果的方式和SDWebImage缓存机制的验证
- 自己封装图片请求,好于SDWebImage,优化了UItableView(上)
- 两种利用GCD实现分步获取结果的方式和SDWebImage缓存机制的验证
- 利用sdwebImage下载图片
- iOS利用SDWebImage实现缓存的计算与清理
- 自己封装图片请求,好于SDWebImage,优化了UItableView(上)
- 利用SDWebImage下载image 使用
- iOS开发:利用SDWebImage实现图片加载与缓存
- iOS 利用SDWebImage做简单的淡入淡出动画
- 利用SDWebImage清除内存缓存
- (转载)站在巨人肩上的微创新,对SDWebImage的扩展,源码分享了<1月15日再次更新>
- iOS利用SDWebImage实现缓存的计算与清理
- 利用SDWebImage存储图片到内存缓存中
- IOS利用SDWebImage来下载头像图片
- SDWebImage的详细使用
- 猫猫学iOS 之微博项目实战(8)用AFNetworking和SDWebImage简单加载微博数据
- iOS开发- SDWebImage第三方基本使用
- 解决:SDWebImage异步请求图片失败,图片没有加载出来
- ios通过SDWebImage实现图片加载时的渐变效果
- SDWebImage的option介绍