开源中国iOS客户端学习——(七)MBProgressHUD特效
在开源中国iOS客户端中也用到了MBProgressHUD这个特效,主要作用为应用显示一个过渡的作用,常用于打开一个联网页面加载过程,防止出现假死现象,如果网速慢则告诉用户已经在很努力很努力的加载中。
GitHub上下载地址:https://github.com/jdg/MBProgressHUD
源码中也自带了一个Demo,显示13中动画效果,可以根据需要选取其中特效加以使用,使用方法基本一样;使用的时候只加把MBProgressHUD.h和MBProgressHUD.m拖入工程中,在使用的文件中加上#import"MBProgressHUD.h"
在开源中国iOS客户端中只用到一种特效,当我们选取一条资讯查看详细信息时:
我们在跳转到实现的代码部分,在NewsDetail.m的clickFavorite和viewDidLoad方法中
- (void)clickFavorite:(id)sender { UIBarButtonItem * btn = (UIBarButtonItem *)sender; BOOL isFav = [btn.title isEqualToString:@"收藏此文"]; MBProgressHUD *hud = [[MBProgressHUD alloc] initWithView:self.view]; [Tool showHUD:isFav ? @"正在添加收藏":@"正在删除收藏" andView:self.view andHUD:hud]; [[AFOSCClient sharedClient]getPath:isFav ? api_favorite_add : api_favorite_delete parameters:[NSDictionary dictionaryWithObjectsAndKeys: [NSString stringWithFormat:@"%d", [Config Instance].getUID],@"uid", [NSString stringWithFormat:@"%d", newsID],@"objid", @"4",@"type", nil] success:^(AFHTTPRequestOperation *operation, id responseObject) { [hud hide:YES]; [Tool getOSCNotice2:operation.responseString]; ApiError *error = [Tool getApiError2:operation.responseString]; if (error == nil) { [Tool ToastNotification:operation.responseString andView:self.view andLoading:NO andIsBottom:NO]; return ; } switch (error.errorCode) { case 1: { btnFavorite.title = isFav ? @"取消收藏" : @"收藏此文"; self.singleNews.favorite = !self.singleNews.favorite; } break; case 0: case -2: case -1: { [Tool ToastNotification:[NSString stringWithFormat:@"错误 %@",error.errorMessage] andView:self.view andLoading:NO andIsBottom:NO]; } break; } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { [hud hide:YES]; [Tool ToastNotification:@"添加收藏失败" andView:self.view andLoading:NO andIsBottom:NO]; }]; }
- (void)viewDidLoad { [super viewDidLoad]; self.tabBarItem.title = @"资讯详情"; self.tabBarItem.image = [UIImage imageNamed:@"detail"]; //WebView的背景颜色去除 [Tool clearWebViewBackground:self.webView]; self.singleNews = [[SingleNews alloc] init]; self.navigationController.title = @"资讯详情"; self.webView.delegate = self; [self.webView loadHTMLString:@"" baseURL:nil]; if ([Config Instance].isNetworkRunning) { MBProgressHUD *hud = [[MBProgressHUD alloc] initWithView:self.view]; [Tool showHUD:@"正在加载" andView:self.view andHUD:hud]; NSString *url = [NSString stringWithFormat:@"%@?id=%d",api_news_detail, newsID]; [[AFOSCClient sharedClient] getPath:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { [Tool getOSCNotice2:operation.responseString]; [hud hide:YES]; self.singleNews = [Tool readStrNewsDetail:operation.responseString]; if (self.singleNews == nil) { [Tool ToastNotification:@"加载失败" andView:self.view andLoading:NO andIsBottom:NO]; return; } [self loadData:self.singleNews]; //如果有网络 则缓存它 if ([Config Instance].isNetworkRunning) { [Tool saveCache:1 andID:self.singleNews._id andString:operation.responseString]; } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { [hud hide:YES]; if ([Config Instance].isNetworkRunning) { [Tool ToastNotification:@"错误 网络无连接" andView:self.view andLoading:NO andIsBottom:NO]; } }]; } else { NSString *value = [Tool getCache:1 andID:newsID]; if (value) { self.singleNews = [Tool readStrNewsDetail:value]; [self loadData:self.singleNews]; } else { [Tool ToastNotification:@"错误 网络无连接" andView:self.view andLoading:NO andIsBottom:NO]; } } }
分析viewDidLoad方法,
首先是判断网络是否连通状态,如果是
定义在当前的view中定义一个MBProgressHUD对象,进行初始化
[ToolshowHUD:@"正在加载" andView:self.viewandHUD:hud];是在Tool类里面进行的一次封装,设置MBProgressHUD的显示信息
+ (void)showHUD:(NSString *)text andView:(UIView *)view andHUD:(MBProgressHUD *)hud { [view addSubview:hud]; hud.labelText = text;//显示提示 hud.dimBackground = YES;//使背景成黑灰色,让MBProgressHUD成高亮显示 hud.square = YES;//设置显示框的高度和宽度一样 [hud show:YES]; }
然后在用到AFNetWork类库的getPath:parameters:success:failure:方法,嵌套在block块中判断请求的url是否成功,在执行[Tool getOSCNotice2:operation.responseString];这个方法也是封装在Tool类中,封装的是TBXML解析器,如果解析成功立即设置MBProgressHUD隐藏属性[hud hide:YES];如果请求的url不成功直接设置MBProgressHUD隐藏属性[hud hide:YES],再用GCDiscreetNotificationView进行通知“错误 网络无连接”;
本文转自新风作浪 51CTO博客,原文链接:http://blog.51cto.com/duxinfeng/1208683,如需转载请自行联系原作者
开源中国iOS客户端学习——(七)MBProgressHUD特效相关推荐
- 开源中国iOS客户端学习
开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客 http://blog.csdn.net/column/details/xfzl-kykhd.html ...
- 开源中国iOS客户端学习——(十二)用户登陆
---------------------------------------------------------------------------------------------------- ...
- 开源中国iOS客户端学习——(八)网络通信AFNetworking类库
AFNetworking是一个轻量级的iOS网络通信类库,继ASI类库不在更新之后开发者们有一套不错选择: AFNetworking类库×××和使用教程: https://github.com/AFN ...
- 开源中国iOS客户端学习——(一)Prefix.pch文件
2019独角兽企业重金招聘Python工程师标准>>> 当我们新建一个工程的时候,在Supporting FIles文件下会看到一个以 -Prefix.pch结尾文件的文件,pch ...
- 开源中国iOS客户端学习——(五)网络通信ASI类库(1)
如今的应用大部分基予网络,在开源中国iOS客户端源码中关于网络通信方面用了三个类库,ASI和AFNetworking,还有一个苹果官方给出的Reachability用于检测当前网络状况,本文介绍当前用 ...
- 开源中国iOS客户端学习——序
------------------------------------------------------------------------------------ 2015.8.19 更新 考虑 ...
- 开源中国IOS客户端
自己想看看别人开发的项目,吸收下经验,然后找到开源中国,有些网上的大牛自己也开发出了开源中国的客户端 在网上看到很多网友说,下载下来安装不了之类的东西,在我这里我带个路,希望对那些朋友有些帮助. ht ...
- 开源中国android客户端学习 第一天
源码地址:http://git.oschina.net/oschina/android-app 第一天,看了很久oschina的源码,然后提取了他的头部和底部(本人新手,见谅哈) 效果图
- 开源中国Android客户端v2.6.5代码开源啦!
我们发布了开源中国Android客户端v2.6.5,这个版本中包含了大量的细节改进,感兴趣的朋友们现在就可以checkout代码出来钻研了交流了. (新版界面实现等,请参考 net.oschina.a ...
最新文章
- 我的业务要不要用人工智能?引入AI前你需要评估的(二)
- 数据挖掘:一个end2end完整实例
- php 替换字符串 图片,PHP替换字符串实现图片自适应屏幕实例代码
- MySQL查询连接数
- PPT 2010实现使用自定义主题付下载
- Hive高级用法汇总
- [css] 使用css写一个垂直翻转图片的效果
- java实现对大文件切割下载_Java实现大文件的切割与合并操作示例
- linux下文件删除不了
- 控件绑定有序对象集合winform
- python基础字典(七)
- Python最大公约数gcd、最小公倍数lcm
- 两化融合:唐山探路重工业城市智慧转型
- 力扣每日一刷-144,二叉树前序遍历-递归解法
- # 学号20155308 2006-2007-2 《Java程序设计》第4周学习总结
- 人体姿态估计综述 2020最全
- 深度学习导论 - 读李宏毅《1天搞懂深度学习》
- 决策支持系统复习资料
- PTA题目:7-9 抢红包 (25分)
- 基于注意力机制的超分辨率重建汇总
热门文章
- [svc]centos7的服务治理-systemd
- POJ 2457 BFS
- centos下不重装php——给PHP添加新扩展库
- 判断一个网站用什么服务器
- Android自定义样式
- [转]如何使用BackTrack破解WIFI无线网络的WEP密钥
- 现在物价虽然高得离谱,但是内存条都白菜价格了,需要调整程序架构的思维“与时俱进” --- 改进系列之一...
- CSS样式(四)- CSS定位
- Ubuntu学习日记--Lesson2:创建、重命名、删除文件及文件夹,强制清空回收站方法
- 数据结构笔记(八)-- 链式栈