在開源中國iOS客戶端中也用到了MBProgressHUD這個特效,主要做用爲應用顯示一個過渡的做用,經常使用於打開一個聯網頁面加載過程,防止出現假死現象,若是網速慢則告訴用戶已經在很努力很努力的加載中。 git
GitHub上下載地址:https://github.com/jdg/MBProgressHUD github
源碼中也自帶了一個Demo,顯示13中動畫效果,能夠根據須要選取其中特效加以使用,使用方法基本同樣;使用的時候只加把MBProgressHUD.h和MBProgressHUD.m拖入工程中,在使用的文件中加上#import"MBProgressHUD.h" web
在開源中國iOS客戶端中只用到一種特效,當咱們選取一條資訊查看詳細信息時: api
![](http://static.javashuo.com/static/loading.gif)
咱們在跳轉到實現的代碼部分,在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對象,進行初始化 ide
[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進行通知「錯誤 網絡無鏈接」;