美文网首页
SDWebImage的一些使用技巧

SDWebImage的一些使用技巧

作者: ArsonQ | 来源:发表于2016-05-05 09:31 被阅读0次

    转载于: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的一些使用技巧

          本文链接:https://www.haomeiwen.com/subject/prldrttx.html