開源中國iOS用戶端學習——(七)MBProgressHUD特效

來源:互聯網
上載者:User

在開源中國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進行通知“錯誤 網路無串連”;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.