SDWebImage的一些使用技巧

转载于:http://www.jianshu.com/p/dabc0c6d083e 作者:hosea_zhou(作者)

SDWebImage作为目前最受欢迎的图片下载第三方框架,使用率很高。很多时候在网络网络状态为WiFi时,显示图片高清图;网络状态为蜂窝移动网络时,显示图片缩略图。

由于要监听网络状态,可以使用RealReachability与AFNetWorking,这两个都是在Github获得大量star的第三方开源框架,在这里主要讲AFNetWorking。
我们利用cocoaPods导入第三方框架AFNetWorking到项目中。
在AppDelegate.m文件中的application:didFinishLaunchingWithOptions:方法中监听网络状态。

// AppDelegate.m 文件中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  // 监控网络状态 
  [[AFNetworkReachabilityManager sharedManager] startMonitoring];}
  // 以下代码在需要监听网络状态的方法中使用        
  AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager  sharedManager];
  if (mgr.isReachableViaWiFi) { 
  // 在使用Wifi, 下载原图 
  } else { 
  // 其他,下载小图
  } 
}

但因机制原因,实际中下载图片的操作是这样的

- setItem:(CustomItem *)item{ 
  _item = item; 
  // 占位图片 
  UIImage *placeholder = [UIImage imageNamed:@"placeholderImage"]; 
  // 从内存\沙盒缓存中获得原图 
  UIImage *originalImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:item.originalImage];
   if (originalImage) { // 如果内存\沙盒缓存有原图,那么就直接显示原图(不管现在是什么网络状态) self.imageView.image = originalImage; 
   } 
   else { 
  // 内存\沙盒缓存没有原图 
  AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
  if (mgr.isReachableViaWiFi) { // 在使用Wifi, 下载原图     
  [self.imageView sd_setImageWithURL:[NSURL URLWithString:item.originalImage] placeholderImage:placeholder]; 
  } 
  else if (mgr.isReachableViaWWAN) { // 在使用手机自带网络 // 用户的配置项假设利用NSUserDefaults存储到了沙盒中 
    // [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"alwaysDownloadOriginalImage"]; 
    // [[NSUserDefaults standardUserDefaults] synchronize];
    #warning 从沙盒中读取用户的配置项:在3G\4G环境是否仍然下载原图 
    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 { 
    // 没有网络
    UIImage *thumbnailImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:item.thumbnailImage]; 
      if (thumbnailImage) { 
        // 内存\沙盒缓存中有小图 
        self.imageView.image = thumbnailImage; 
      } 
      else { 
        // 处理离线状态,而且有没有缓存时的情况 
        self.imageView.image = placeholder; 
      } 
    } 
  }
}

你可能感兴趣的:(SDWebImage的一些使用技巧)