文档章节

开源中国iOS客户端学习——(七)MBProgressHUD特效

青云_K
 青云_K
发布于 2013/01/17 11:36
字数 802
阅读 2544
收藏 13

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

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

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


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

  

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

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

  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.       
  9.     self.singleNews = [[SingleNews alloc] init];  
  10.     self.navigationController.title = @"资讯详情";  
  11.     self.webView.delegate = self;  
  12.     [self.webView loadHTMLString:@"" baseURL:nil];  
  13.       
  14.     if ([Config Instance].isNetworkRunning)   
  15.     {  
  16.         MBProgressHUD *hud = [[MBProgressHUD alloc] initWithView:self.view];  
  17.         [Tool showHUD:@"正在加载" andView:self.view andHUD:hud];  
  18.           
  19.         NSString *url = [NSString stringWithFormat:@"%@?id=%d",api_news_detail, newsID];  
  20.         [[AFOSCClient sharedClient] getPath:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {  
  21.               
  22.             [Tool getOSCNotice2:operation.responseString];  
  23.             [hud hide:YES];  
  24.               
  25.             self.singleNews = [Tool readStrNewsDetail:operation.responseString];  
  26.             if (self.singleNews == nil) {  
  27.                 [Tool ToastNotification:@"加载失败" andView:self.view andLoading:NO andIsBottom:NO];  
  28.                 return;  
  29.             }  
  30.             [self loadData:self.singleNews];  
  31.               
  32.             //如果有网络 则缓存它  
  33.             if ([Config Instance].isNetworkRunning)   
  34.             {  
  35.                 [Tool saveCache:1 andID:self.singleNews._id andString:operation.responseString];  
  36.             }  
  37.               
  38.         } failure:^(AFHTTPRequestOperation *operation, NSError *error) {  
  39.               
  40.             [hud hide:YES];  
  41.             if ([Config Instance].isNetworkRunning) {  
  42.                 [Tool ToastNotification:@"错误 网络无连接" andView:self.view andLoading:NO andIsBottom:NO];  
  43.             }  
  44.               
  45.         }];  
  46.     }  
  47.     else  
  48.     {  
  49.         NSString *value = [Tool getCache:1 andID:newsID];  
  50.         if (value) {  
  51.             self.singleNews = [Tool readStrNewsDetail:value];  
  52.             [self loadData:self.singleNews];  
  53.         }  
  54.         else {  
  55.             [Tool ToastNotification:@"错误 网络无连接" andView:self.view andLoading:NO andIsBottom:NO];  
  56.         }  
  57.     }  
  58. }  

分析viewDidLoad方法,

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

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

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

  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进行通知“错误 网络无连接”;

本文转载自:http://blog.csdn.net/duxinfeng2010/article/details/8510894

青云_K
粉丝 31
博文 71
码字总数 17199
作品 0
石家庄
程序员
私信 提问
Xamarin.Forms之UserDialogs 重制版本

在 forms 里面,目前使用比较多的弹出组件是 Acr.UserDialogs ,但是这个组件有些小问题,比如 loading .hide 会同时把 toast 给一起关掉,android 下的 toast 希望是 安卓原生的toast 样子,...

Passingwind
2018/12/15
0
0
常用iOS开发网站资源

图标 https://icomoon.io/app/#/select http://iconfont.cn/repositories http://www.iconfont.cn Api数据接口 聚合数据:http://www.juhe.cn 百度APIStore:http://apistore.baidu.com 医药......

请天点
2016/12/29
196
0
IOS IPhone 开发需要的开源库[编辑中.. 不断更新]

前言 我是 java & php 程序员,遇到了坑爹的iPhone,被逼无奈在崩溃的边缘下学习object-c ,在学习中遇到了很多 奇葩,无知,龌蹉,呕吐的问题(弱弱的说 : 有的些问题到现在还不知道具体的原...

海参
2013/06/03
2.1K
6
关于iOS 11和iPhone X的一些适配问题及解决方案

前言:项目要在十一之前上架,这周把xcode更新了一下,也针对iOS 11和iPhone X做了适配,在这里做下记录和分享,不多做赘述,直接上遇到的问题和解决办法。 一 ·scrollView下移20像素或tab...

Samson_Xu
2017/09/22
0
0
10个必需的iOS开发工具和资源

界面总不是一件很容易事,尤其是iPhone/iPad的界面,做过iOS开发的程序员,一定会感到开发iPhone/iPad的界面是一件多么不容易的事。下面的文章来自10 Essential iOS Developer Tools & Reso...

长平狐
2012/08/13
91
0

没有更多内容

加载失败,请刷新页面

加载更多

怎样在磁盘上查找MySQL表的大小?这里有答案

导读 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应该在 INFORMATION_SCHEMA.TABLES 中提供这些信息吗?没那么简单! 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎...

问题终结者
26分钟前
6
0
jQuery load() 方法实现加载远程数据

jQuery load() 方法是简单但强大的 AJAX 方法。load() 方法从服务器加载数据,并把返回的数据放入被选元素中。 语法: $(selector).load(URL,data,callback);必需的 URL 参数规定您希望加载的...

前端老手
27分钟前
5
0
Spring Boot缓存实战 Redis 设置有效时间和自动刷新缓存-2

问题 上一篇Spring Boot Cache + redis 设置有效时间和自动刷新缓存,时间支持在配置文件中配置,说了一种时间方式,直接扩展注解的Value值,如: @Override@Cacheable(value = "people#${s...

xiaolyuh
35分钟前
9
0
怎样在磁盘上查找MySQL表的大小?这里有答案

我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应该在 INFORMATION_SCHEMA.TABLES 中提供这些信息吗?没那么简单! 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应...

Linux就该这么学
今天
5
0
Redis

一、Redis支持的几种数据类型:字符串、List、SET、HASH、ZSET 二、Redis的缓存技术主要是为了降低关系数据库的负载并减少网站成本 三、在Redis里面,被MULTI命令和EXEC命令包围的所有命令会...

BobwithB
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部