开源中国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,如需转载请自行联系原作者






相关文章
|
5月前
|
Linux Android开发 iOS开发
基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux
基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux
88 0
|
5月前
|
安全 前端开发 Android开发
鸿蒙开发|鸿蒙系统的介绍(为什么要学习鸿蒙开发|鸿蒙系统的官方定义|鸿蒙和安卓、ios的对比)
鸿蒙开发学习是一项探索性的工作,旨在开发一个全场景分布式操作系统,覆盖所有设备,让消费者能够更方便、更直观地使用各种设备。
296 6
鸿蒙开发|鸿蒙系统的介绍(为什么要学习鸿蒙开发|鸿蒙系统的官方定义|鸿蒙和安卓、ios的对比)
|
7月前
|
iOS开发
iOS UIKit Dynamics Demo 学习地址列表
iOS UIKit Dynamics Demo 学习地址列表
23 0
|
8月前
|
API 开发工具 iOS开发
一点就通,社交源码IOS客户端开发集成SDK
所谓SDK,全称是SoftwaredevelopmentKit,翻译成软件开发工具包。SDK用助开发某种软件,今天给大家简单讲解下如何在社交源码IOS客户端上开发集成 SDK。
|
8月前
|
存储 网络安全 数据安全/隐私保护
iOS 逆向编程(八)远程拷贝 - 客户端(电脑)通过 ssh 拷贝文件到服务端(手机)
iOS 逆向编程(八)远程拷贝 - 客户端(电脑)通过 ssh 拷贝文件到服务端(手机)
98 0
|
8月前
|
存储 网络安全 数据安全/隐私保护
iOS 逆向编程(七)客户端(手机)免密认证登录
iOS 逆向编程(七)客户端(手机)免密认证登录
99 0
|
9月前
|
Android开发 iOS开发 Windows
无影产品动态|iOS & Android客户端6.0.0版本发布,提升触控灵敏度,操作体验更丝滑
无影ios & Android客户端6.0.0版本发布!移动端触控体验更舒适,用户操作更便捷,一起来看看!
678 0
无影产品动态|iOS & Android客户端6.0.0版本发布,提升触控灵敏度,操作体验更丝滑
|
Web App开发 弹性计算 Android开发
阿里云无影云桌面客户端下载Win/Mac/iOS/安卓/Web端均支持
阿里云无影客户端下载系统Win/Mac/iOS/安卓/Web端均支持
3575 0
阿里云无影云桌面客户端下载Win/Mac/iOS/安卓/Web端均支持
|
iOS开发
iOS开发 - 写一个刷新的控件(未封装,适合新手学习,查看原理)
iOS开发 - 写一个刷新的控件(未封装,适合新手学习,查看原理)
128 0
iOS开发 - 写一个刷新的控件(未封装,适合新手学习,查看原理)
|
物联网 Android开发 iOS开发
iOS开发 - 蓝牙学习的总结
iOS开发 - 蓝牙学习的总结
129 0