Contents
  1. 1. 1.封装网络(使用SDWebImage和AFNetworking框架)下载图片

1.封装网络(使用SDWebImage和AFNetworking框架)下载图片

程序启动的时候就会调用,需要先在这个方法中开始监测网络

1
2
3
4
5
6
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 监控网络状况
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
}
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#import <UIKit/UIKit.h>
#import <UIImageView+WebCache.h>
@interface UIImageView (Download)
- (void)xy_setOriginImage:(NSString *)originImageURL thumbnailImage:(NSString *)thumbnailImageURL placeholder:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock;
- (void)xy_setHeader:(NSString *)headerUrl;
@end
#import "UIImageView+Download.h"
#import <AFNetworkReachabilityManager.h>
#import <UIImageView+WebCache.h>
@implementation UIImageView (Download)
- (void)xy_setOriginImage:(NSString *)originImageURL thumbnailImage:(NSString *)thumbnailImageURL placeholder:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock
{
// 根据网络状态来加载图片
AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
// 获得原图(SDWebImage的图片缓存是用图片的url字符串作为key)
UIImage *originImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:originImageURL];
if (originImage) { // 原图已经被下载过
[self sd_setImageWithURL:[NSURL URLWithString:originImageURL] placeholderImage:placeholder completed:completedBlock];
} else { // 原图并未下载过
if (mgr.isReachableViaWiFi) {
[self sd_setImageWithURL:[NSURL URLWithString:originImageURL] placeholderImage:placeholder completed:completedBlock];
} else if (mgr.isReachableViaWWAN) {
// 3G\4G网络下时候要下载原图
BOOL downloadOriginImageWhen3GOr4G = YES;
if (downloadOriginImageWhen3GOr4G) {
[self sd_setImageWithURL:[NSURL URLWithString:originImageURL] placeholderImage:placeholder completed:completedBlock];
} else {
[self sd_setImageWithURL:[NSURL URLWithString:thumbnailImageURL] placeholderImage:placeholder completed:completedBlock];
}
} else { // 没有可用网络
UIImage *thumbnailImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:thumbnailImageURL];
if (thumbnailImage) { // 缩略图已经被下载过
[self sd_setImageWithURL:[NSURL URLWithString:thumbnailImageURL] placeholderImage:placeholder completed:completedBlock];
} else { // 没有下载过任何图片
// 占位图片;
[self sd_setImageWithURL:nil placeholderImage:placeholder completed:completedBlock];
}
}
}
}
- (void)xy_setHeader:(NSString *)headerUrl
{
UIImage *placeholder = [UIImage xy_circleImageNamed:@"defaultUserIcon"];
[self sd_setImageWithURL:[NSURL URLWithString:headerUrl] placeholderImage:placeholder options:0 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
// 图片下载失败,直接返回,按照它的默认做法
if (!image) return;
self.image = [image xy_circleImage];
}];
}
@end
Contents
  1. 1. 1.封装网络(使用SDWebImage和AFNetworking框架)下载图片