首先说一下怎么监听网络状态的改变

监听网络状态的改变可以使用苹果提供的Reachability来检测网络状态,也可以使用AFN框架来监听网络状态的改变.相比而言,我更推荐大家使用AFN来监听

  • 如何使用AFN来监听网络状态的改变呢?
    AFN框架中的AFNetworkReachabilityManager是专门用来监听网络状态的改变.可以点进去AFNetworkReachabilityManager的头文件中查看.使用十分简单.相信大家都看得懂.
    用AFN来监听网络状态的改变是需要自己手动开启监听的.在项目中一般在AppDelegate的程序启动完毕的方法中开始监听网络状态的改变.

    // 开启监听网络状态的改变(一定要使用单例对象)[[AFNetworkReachabilityManager sharedManager] startMonitoring];

在开发中下载和显示图片,不用多说,当然首选的是SDWebImage框架了.

关于SDWebImage框架,如果你还不会用,那么你别和我说你做过iOS开发啊.

  • 在项目中,为了提高用户的体验,往往都是要根据用户的网络环境不同,而显示不同的图片,以节省用户的流量.
  • 伪代码:
    if (缓存中有原图) {显示原图} else {if (Wifi环境) {下载显示原图} else if (手机自带网络) {if (偏好设置3G\4G环境下仍然下载原图) {下载显示原图} else {下载显示小图}} else {if (缓存中有小图) {显示小图} else {显示占位图片}}}

代码的封装(给UIImageView添加分类)

  • 首先要用上面所讲的用AFN开启监听网络状态
/***  设置imageView显示的图片**  @param OriginalImageURL  原图链接*  @param thumbnailImageURL 小图链接*  @param placeholderImage  占位图片*  @param completedBlock    获取图片完成之后的回调block*/
- (void)lxn_setImageWithOriginalImageURL:(NSString *)OriginalImageURL thumbnailImageURL:(NSString *)thumbnailImageURL placeholderImage:(UIImage *)placeholderImage completed:(SDWebImageCompletionBlock)completedBlock
{// 判断下缓存中有没有高清的大图UIImage *originalImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:OriginalImageURL];if (originalImage) {    // 缓存中有高清大图// 为什么要用这个方法设置图片呢?  因为这个方法设置图片会先取消这个对象的上一次网络请求, 防止因为图片下载慢的时候用户又滑动了屏幕而图片错位.  这个方法会先去缓存中找,没有找到才会继续下载[self sd_setImageWithURL:[NSURL URLWithString:OriginalImageURL] placeholderImage:placeholderImage completed:completedBlock];} else {    // 缓存中没有大图AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];if (manager.isReachableViaWiFi) { // WIFI下, 下载大图[self sd_setImageWithURL:[NSURL URLWithString:OriginalImageURL] placeholderImage:placeholderImage completed:completedBlock];} else if(manager.isReachableViaWWAN) {   // 3G/4GBOOL alwaysDownloadOrinigalImage = [[NSUserDefaults standardUserDefaults] boolForKey:@"alwaysDownloadOrinigalImage"];if (alwaysDownloadOrinigalImage) { // 设置了3G/4G环境下任然显示大图[self sd_setImageWithURL:[NSURL URLWithString:OriginalImageURL] placeholderImage:placeholderImage completed:completedBlock];} else {    // 下载小图[self sd_setImageWithURL:[NSURL URLWithString:thumbnailImageURL] placeholderImage:placeholderImage completed:completedBlock];}} else {    // 没有网络// 判断小图有没有缓存UIImage *thumbnailImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:OriginalImageURL];if (thumbnailImage) { // 显示小图[self sd_setImageWithURL:[NSURL URLWithString:thumbnailImageURL] placeholderImage:placeholderImage completed:completedBlock];} else { // 显示占位图片[self sd_setImageWithURL:nil placeholderImage:placeholderImage completed:completedBlock];}}}}

补充

SDWebImage框架的sd_setImageWithURL:placeholderImage:方法的执行步骤
1.取消当前imageView之前关联的请求
2.设置占位图片到当前imageView上面
3.如果缓存中有对应的图片,那么就显示到当前imageView上面

文/李小南(简书作者)
原文链接:http://www.jianshu.com/p/d42dd6ccd682
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

iOS中根据网络环境显示不同图片相关推荐

  1. ios html gif 显示,iOS中gif图的显示方法示例

    iOS中gif图的显示方法示例 发布时间:2020-09-19 06:15:42 来源:脚本之家 阅读:86 作者:蓝光95 一.前言 iOS开发中,大部分时候我们显示一张静态图就可以了,但是有的时候 ...

  2. ios 中webView加载html文本图片显示不全

    在iOS开发过程中,用webView显示富文本内容是很常见的需求,加载富文本时通常还要根据webView的高度动态计算cell的高度(例如我们要在tableView或者collectionView的某 ...

  3. ios开发 ajax hook,IOS中的网络拦截总结

    因为业务场景需要,要求对App中网络请求进行拦截.这里包括原生网络请求和WebView里的网络请求.之前我们了解过原生网络请求的拦截是可以实现的,但是WebView中网络请求似乎还不太可能,所以抱着尝 ...

  4. iOS中确认网络的方法

    开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息.如果没有处理它们,是不会通过Apple的审查的. Apple 的 例程 Reachability 中介绍了取得/检测网络状态的方法.在 ...

  5. Android中如何加载显示大尺寸图片不发生OOM

    前言:当加载高清大图时,系统给每个应用分配的内存是有限的,如果一个资源图片太大,加载到内存中后,占用的内存空间也会很大,这样就会造成OOM.那在Android开发中如何正确加载高清大图呢? 采用Bit ...

  6. iOS 模拟各种网络环境

    移动APP使用环境复杂,我们在测试APP时经常在 2G.3G/4G.WIFI.飞行模式 之间来回切换网络环境,暴力测试APP是否能正常运行,是否有闪退情况等.这些我们都能在设置或者控制中心来切换网络环 ...

  7. iOS 中的网络请求 (同步请求、异步请求、GET请求、POST请求)

    1.同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, 2.异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然 ...

  8. React中使用SVG文件显示成图片

    SVG 没法直接渲染都img.一般引用插件 方案一:使用 create-react-app脚手架 创建react项目 方案二:file-loader 插件 SVG文件优缺点 优点: 不失真, 放大缩小 ...

  9. 微信小程序苹果IOS手机无法加载显示临时图片路径

    问题: 苹果手机无法显示图片,是一片空白. 解决办法: 1,上传到服务器: 把图片上传到服务器,加载服务器路径.但是有没有更好的办法呢,不然太浪费服务器资源了,只是用来临时显示而已,还得定时清理! 2 ...

最新文章

  1. extern用法详解
  2. project-population
  3. C语言100例01 PHP版(练习)
  4. 【MFC系列-第18天】企业信息管理软件开发
  5. httpHandlers和httpModules接口介绍 (5)
  6. 二分查找和二叉查找树
  7. php mysql json 转义字符_PHP转义Json里的特殊字符的函数
  8. ble l2cap 工作过程_BLE 链路层报文详解
  9. java基础知识点整理一
  10. 程序读取凡人修仙传热度数据
  11. android 模拟器 安装教程,电脑用安卓模拟器详细安装教程
  12. C51单片机实现 贪吃蛇
  13. JSON Viewer有个大bug导致不得不放弃掉
  14. R语言威尔科克森(Wilcoxon)分布
  15. 基于sklearn进行蝴蝶花分类案例(Python机器学习笔记)
  16. 在i3wm中修改默认终端
  17. 提升企业团队凝聚力的四步法
  18. 蓝牙解码格式哪个最好_可能是声音最好的蓝牙解码耳放之一,Oriolus 1795 体验...
  19. html百度天气查询api,百度提供天气预报查询接口API
  20. Java等额本息年化利率,转等本等息月利率

热门文章

  1. 给的再多,不如懂我——Gif录制工具,这两个就够了
  2. XUPT 寒假算法集训第三周
  3. 微信表情过滤 EmojiFilterUtil
  4. 如何正确创建电子邮件通讯(逐步)
  5. EMC设计理论通俗非科班学习笔记(完结)
  6. 是否还被word中各种下划线、波浪线困扰,来看这里(Word中拼写语法错误)
  7. 【WinForm】关于截图识别数字并计算的桌面程序实现方案
  8. 阶乘之和取后六位以及有趣的计时函数。
  9. 使用go搭建一个简单的web服务器(3)验证表单的输入
  10. Web网页分享到新浪微博与QQ空间链接