轉(zhuǎn)載于:http://www.itdecent.cn/p/dabc0c6d083e 作者:hosea_zhou(簡(jiǎn)書作者)
SDWebImage作為目前最受歡迎的圖片下載第三方框架,使用率很高。很多時(shí)候在網(wǎng)絡(luò)網(wǎng)絡(luò)狀態(tài)為WiFi時(shí),顯示圖片高清圖;網(wǎng)絡(luò)狀態(tài)為蜂窩移動(dòng)網(wǎng)絡(luò)時(shí),顯示圖片縮略圖。
由于要監(jiān)聽網(wǎng)絡(luò)狀態(tài),可以使用RealReachability與AFNetWorking,這兩個(gè)都是在Github獲得大量star的第三方開源框架,在這里主要講AFNetWorking。
我們利用cocoaPods導(dǎo)入第三方框架AFNetWorking到項(xiàng)目中。
在AppDelegate.m文件中的application:didFinishLaunchingWithOptions:方法中監(jiān)聽網(wǎng)絡(luò)狀態(tài)。
// AppDelegate.m 文件中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 監(jiān)控網(wǎng)絡(luò)狀態(tài)
[[AFNetworkReachabilityManager sharedManager] startMonitoring];}
// 以下代碼在需要監(jiān)聽網(wǎng)絡(luò)狀態(tài)的方法中使用
AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
if (mgr.isReachableViaWiFi) {
// 在使用Wifi, 下載原圖
} else {
// 其他,下載小圖
}
}
但因機(jī)制原因,實(shí)際中下載圖片的操作是這樣的
- setItem:(CustomItem *)item{
_item = item;
// 占位圖片
UIImage *placeholder = [UIImage imageNamed:@"placeholderImage"];
// 從內(nèi)存\沙盒緩存中獲得原圖
UIImage *originalImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:item.originalImage];
if (originalImage) { // 如果內(nèi)存\沙盒緩存有原圖,那么就直接顯示原圖(不管現(xiàn)在是什么網(wǎng)絡(luò)狀態(tài)) self.imageView.image = originalImage;
}
else {
// 內(nèi)存\沙盒緩存沒有原圖
AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
if (mgr.isReachableViaWiFi) { // 在使用Wifi, 下載原圖
[self.imageView sd_setImageWithURL:[NSURL URLWithString:item.originalImage] placeholderImage:placeholder];
}
else if (mgr.isReachableViaWWAN) { // 在使用手機(jī)自帶網(wǎng)絡(luò) // 用戶的配置項(xiàng)假設(shè)利用NSUserDefaults存儲(chǔ)到了沙盒中
// [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"alwaysDownloadOriginalImage"];
// [[NSUserDefaults standardUserDefaults] synchronize];
#warning 從沙盒中讀取用戶的配置項(xiàng):在3G\4G環(huán)境是否仍然下載原圖
BOOL alwaysDownloadOriginalImage = [[NSUserDefaults standardUserDefaults] boolForKey:@"alwaysDownloadOriginalImage"];
if (alwaysDownloadOriginalImage) {
// 下載原圖
[self.imageView sd_setImageWithURL:[NSURL URLWithString:item.originalImage] placeholderImage:placeholder];
}
else {
// 下載小圖
[self.imageView sd_setImageWithURL:[NSURL URLWithString:item.thumbnailImage] placeholderImage:placeholder]; }
} else {
// 沒有網(wǎng)絡(luò)
UIImage *thumbnailImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:item.thumbnailImage];
if (thumbnailImage) {
// 內(nèi)存\沙盒緩存中有小圖
self.imageView.image = thumbnailImage;
}
else {
// 處理離線狀態(tài),而且有沒有緩存時(shí)的情況
self.imageView.image = placeholder;
}
}
}
}