IOS之MBProgressHUD特效学习

在开源中国iOS客户端中也用到了MBProgressHUD这个特效,主要作用为应用显示一个过渡的作用,常用于打开一个联网页面加载过程,防止出现假死现象,如果网速慢则告诉用户已经在很努力很努力的加载中。

GitHub上下载地址:https://github.com/jdg/MBProgressHUD

源码中也自带了一个Demo,显示13中动画效果,可以根据需要选取其中特效加以使用,使用方法基本一样;使用的时候只加把MBProgressHUD.h和MBProgressHUD.m拖入工程中,在使用的文件中加上#import"MBProgressHUD.h"

在开源中国iOS客户端中只用到一种特效,当我们选取一条资讯查看详细信息时:

   

我们在跳转到实现的代码部分,在NewsDetail.m的clickFavorite和viewDidLoad方法中

[cpp] view plaincopy

  1. - (void)clickFavorite:(id)sender
  2. {
  3. UIBarButtonItem * btn = (UIBarButtonItem *)sender;
  4. BOOL isFav = [btn.title isEqualToString:@"收藏此文"];
  5. MBProgressHUD *hud = [[MBProgressHUD alloc] initWithView:self.view];
  6. [Tool showHUD:isFav ? @"正在添加收藏":@"正在删除收藏" andView:self.view andHUD:hud];
  7. [[AFOSCClient sharedClient]getPath:isFav ? api_favorite_add : api_favorite_delete
  8. parameters:[NSDictionary dictionaryWithObjectsAndKeys:
  9. [NSString stringWithFormat:@"%d", [Config Instance].getUID],@"uid",
  10. [NSString stringWithFormat:@"%d", newsID],@"objid",
  11. @"4",@"type", nil] success:^(AFHTTPRequestOperation *operation, id responseObject) {
  12. [hud hide:YES];
  13. [Tool getOSCNotice2:operation.responseString];
  14. ApiError *error = [Tool getApiError2:operation.responseString];
  15. if (error == nil) {
  16. [Tool ToastNotification:operation.responseString andView:self.view andLoading:NO andIsBottom:NO];
  17. return ;
  18. }
  19. switch (error.errorCode)
  20. {
  21. case 1:
  22. {
  23. btnFavorite.title = isFav ? @"取消收藏" : @"收藏此文";
  24. self.singleNews.favorite = !self.singleNews.favorite;
  25. }
  26. break;
  27. case 0:
  28. case -2:
  29. case -1:
  30. {
  31. [Tool ToastNotification:[NSString stringWithFormat:@"错误 %@",error.errorMessage] andView:self.view andLoading:NO andIsBottom:NO];
  32. }
  33. break;
  34. }
  35. } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
  36. [hud hide:YES];
  37. [Tool ToastNotification:@"添加收藏失败" andView:self.view andLoading:NO andIsBottom:NO];
  38. }];
  39. }

[cpp] view plaincopy

  1. - (void)viewDidLoad
  2. {
  3. [super viewDidLoad];
  4. self.tabBarItem.title = @"资讯详情";
  5. self.tabBarItem.image = [UIImage imageNamed:@"detail"];
  6. //WebView的背景颜色去除
  7. [Tool clearWebViewBackground:self.webView];
  8. self.singleNews = [[SingleNews alloc] init];
  9. self.navigationController.title = @"资讯详情";
  10. self.webView.delegate = self;
  11. [self.webView loadHTMLString:@"" baseURL:nil];
  12. if ([Config Instance].isNetworkRunning)
  13. {
  14. MBProgressHUD *hud = [[MBProgressHUD alloc] initWithView:self.view];
  15. [Tool showHUD:@"正在加载" andView:self.view andHUD:hud];
  16. NSString *url = [NSString stringWithFormat:@"%@?id=%d",api_news_detail, newsID];
  17. [[AFOSCClient sharedClient] getPath:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
  18. [Tool getOSCNotice2:operation.responseString];
  19. [hud hide:YES];
  20. self.singleNews = [Tool readStrNewsDetail:operation.responseString];
  21. if (self.singleNews == nil) {
  22. [Tool ToastNotification:@"加载失败" andView:self.view andLoading:NO andIsBottom:NO];
  23. return;
  24. }
  25. [self loadData:self.singleNews];
  26. //如果有网络 则缓存它
  27. if ([Config Instance].isNetworkRunning)
  28. {
  29. [Tool saveCache:1 andID:self.singleNews._id andString:operation.responseString];
  30. }
  31. } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
  32. [hud hide:YES];
  33. if ([Config Instance].isNetworkRunning) {
  34. [Tool ToastNotification:@"错误 网络无连接" andView:self.view andLoading:NO andIsBottom:NO];
  35. }
  36. }];
  37. }
  38. else
  39. {
  40. NSString *value = [Tool getCache:1 andID:newsID];
  41. if (value) {
  42. self.singleNews = [Tool readStrNewsDetail:value];
  43. [self loadData:self.singleNews];
  44. }
  45. else {
  46. [Tool ToastNotification:@"错误 网络无连接" andView:self.view andLoading:NO andIsBottom:NO];
  47. }
  48. }
  49. }

分析viewDidLoad方法,

首先是判断网络是否连通状态,如果是

定义在当前的view中定义一个MBProgressHUD对象,进行初始化

[ToolshowHUD:@"正在加载" andView:self.viewandHUD:hud];是在Tool类里面进行的一次封装,设置MBProgressHUD的显示信息

[cpp] view plaincopy

  1. + (void)showHUD:(NSString *)text andView:(UIView *)view andHUD:(MBProgressHUD *)hud
  2. {
  3. [view addSubview:hud];
  4. hud.labelText = text;//显示提示
  5. hud.dimBackground = YES;//使背景成黑灰色,让MBProgressHUD成高亮显示
  6. hud.square = YES;//设置显示框的高度和宽度一样
  7. [hud show:YES];
  8. }

然后在用到AFNetWork类库的getPath:parameters:success:failure:方法,嵌套在block块中判断请求的url是否成功,在执行[Tool getOSCNotice2:operation.responseString];这个方法也是封装在Tool类中,封装的是TBXML解析器,如果解析成功立即设置MBProgressHUD隐藏属性[hud hide:YES];如果请求的url不成功直接设置MBProgressHUD隐藏属性[hud hide:YES],再用GCDiscreetNotificationView进行通知“错误 网络无连接”;

时间: 2024-11-10 10:45:57

IOS之MBProgressHUD特效学习的相关文章

《iOS应用逆向工程》学习笔记(四)iOS程序类型

越狱iOS中最常见的程序有Application, Dynamic Library和Daemon三类. 1.Application 除了传统意义上的App外,越狱iOS平台上还有两种App形式的存在:WeeApp(依附于NotificationCenter的App)和PreferenceBundle(依附于Settings的App),常见于Cydia平台. 普通App的bundle中存放的是可执行程序和所需资源,而framework的bundle中存放的是动态链接库. 主要关注App中的三个部分

《iOS应用逆向工程》学习笔记(五)初尝越狱插件OpenSSH

首先在越狱机子上装上OpenSSH插件,然后查看设备的IP地址,这里假设为192.168.xxx.xxx. 然后用Mac上的Terminal通过Open SSH连接到设备上(初次登录密码是alpine,必须立即修改,否则任何人都可以连接到你的机子上搞破坏). 连接命令为:ssh [email protected]设备IP地址 修改密码命令为:passwd 例如: $ ssh [email protected] The authenticity of host '192.168.xxx.xxx (

《iOS应用逆向工程》学习笔记(六)使用dumpdecrypted砸壳

本来是打算用AppCrackr砸壳的,结果砸壳都是失败的,开始以为是App的加密太厉害了,后来才知道是因为AppCrackr太暴力了,引起公愤,结果被人投诉招致核心功能被迫关闭了. 幸好在RE官网搜到一个用dumpdecrypted砸壳的帖子.下面是我砸壳的经历. 一.造锤 1.下载dumpdecrypted源码 下载地址:https://github.com/stefanesser/dumpdecrypted/archive/master.zip,接着在Mac中解压. 2.确认iOS设备的版本

《iOS应用逆向工程》学习笔记(二)iOS系统目录结构(部分)

首先下载个iFile,可以用来直观地查看iOS系统的目录结构. 下面记录一些关键的iOS目录结构: /var:"variable"的简写,存放一些经常更改的文件,例如日志.用户数据.临时文件等.其中/var/mobile/Applications下存放了所有App Store App. /Applications:存放所有的系统App和来自Cydia的App,不包括App Store App.越狱的过程把/Applications变成了一个符号链接,实际指向/var/stash/App

《iOS应用逆向工程》学习笔记(三)iOS文件权限

一个组可以包含多个用户,一个用户可以属于多个组. iOS中的每个文件都有一个属主用户和属主组.每个文件都具有一系列的权限. 在iOS中用3bit表示文件的使用权,从高位到低位分别是r(read), w(write), x(execute)权限. 文件和用户的关系存在三种可能性:(1)此用户是属主用户:(2)此用户不是属主用户,但在属主组里:(3)此用户既不是属主用户,也不在属主组里. 例如: 111101101代表rwxr-xr-x,其8进制为755,它表示该文件的属主用户拥有r, w, x权限

IOS开发-OC学习-常用功能代码片段整理

IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是在做与URL有关的功能时,需要在Info.plist中添加一段代码进而实现让网址完成从Http到Https的转换,以及其他的一些功能. 在从一个新手到逐渐学会各种功能.代码.控件.方法如何使用的过程中,也在逐渐积累一些知识,但是一次总不会把这些东西都深刻记住并完全理解.所以在这儿记录下这些东西,用来

ios 指示器MBProgressHUD 的使用

// 显示指示器 MBProgressHUD *HUD = [MBProgressHUD showHUDAddedTo:[[UIApplication sharedApplication].windows objectAtIndex:1] animated:YES]; [self.view.window addSubview:HUD]; HUD.labelText = @"正在加载中..."; 加载完成后,调用[HUD hide:YES];隐藏 ios 指示器MBProgressHUD

iOS动画详解(学习动画看这一篇就够了)

iOS动画详解(学习动画看这一篇就够了) 一.基础知识 CAAnimation.png 二.CABasicAnimation 1. 动画的属性和解释 2.属性值的解释 repeatCount : 如果在swift中需要一直不断重复:Float.infinity,OC:HUGE_VALF timingFunction: timingFunction.png kCAMediaTimingFunctionLinear--在整个动画时间内动画都是以一个相同的速度来改变.也就是匀速运动.一个线性的计时函数

iOS中MBProgressHUD使用误区

由于工程使用的ARC,alloc后也没太注意,hide并不会将其release,导致其常驻内存.后用Instruments工具时才发现这问题,后悔不已.因此在这备注下.起初代码: HUD = [[MBProgressHUD alloc] initWithView:self.view]; [self.view addSubview:HUD]; HUD.labelText = @"登录中..."; 不用它时:- (void)hudWasHidden:(MBProgressHUD *)hud