iOS-仿支付寶加載web網(wǎng)頁添加進度條

目前市場上APP常會嵌入不少的h5頁面,參照支付寶顯示web頁面的方式, 做了一個導航欄下的加載進度條. 因為項目最低支持iOS7,所以不能使用WKWebView來加載網(wǎng)頁, 只能使用 UIWebView, 但是查看 UIWebView的API, 并沒有代理或是通知告訴我們webView加載了多少, 所以這個進度條我決定用模擬進度-俗稱假進度(虛擬的方式來做,就是假裝知道加載了多少).

實現(xiàn)原理:
自定義一個UIView的加載進度條,添加到Nav標題欄下方,提供兩個方法:(開始加載/結束加載), 在網(wǎng)頁加載適當?shù)臅r候使用.

Step1. 自定義加載進度條WebviewProgressLine:

1、startLoadingAnimation 開始加載

開始加載,先動畫模擬一個0.4s的加載,加載寬度為0.6倍屏幕寬度,動畫結束,接著0.4s實現(xiàn),共0.8倍的屏幕寬度。

- (void)startLoadingAnimation {
    self.hidden = NO;
    self.width = 0.0;
    
    __weak UIView *weakSelf = self;
    [UIView animateWithDuration:0.4 animations:^{
        weakSelf.width = UI_View_Width * 0.6;
    } completion:^(BOOL finished) {
        [UIView animateWithDuration:0.4 animations:^{
            weakSelf.width = UI_View_Width * 0.8;
        }];
    }];    
}

2、endLoadingAnimation 結束加載

結束動畫,動畫模擬1.0倍數(shù)的屏幕寬度,實現(xiàn)全部加載完成,并最后隱藏進度條。

- (void)endLoadingAnimation {
    __weak UIView *weakSelf = self;
    [UIView animateWithDuration:0.2 animations:^{
        weakSelf.width = UI_View_Width;
    } completion:^(BOOL finished) {
        weakSelf.hidden = YES;
    }];
}

3、自定義線條顏色

// 進度條顏色
@property (nonatomic,strong) UIColor *lineColor;
- (void)setLineColor:(UIColor *)lineColor {
    _lineColor = lineColor;
    
    self.backgroundColor = lineColor;
}

Step2. web頁面使用進度條方法:

1、初始化進度條

self.progressLine = [[WebviewProgressLine alloc] initWithFrame:CGRectMake(0, 64, UI_View_Width, 3)];
self.progressLine.lineColor = [UIColor blueColor];
[self.view addSubview:self.progressLine];

2、初始化網(wǎng)頁并使用代理

懶加載:

- (UIWebView *)web {
    if (!_web) {
        UIWebView *web = [[UIWebView alloc] initWithFrame:self.view.bounds];
        // UIWebView加載過程中,在頁面沒有加載完畢前,會顯示一片空白。為解決這個問題,方法如下:讓UIWebView背景透明。
        web.backgroundColor = [UIColor clearColor];
        web.opaque = NO;
        [web setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"webbg.png"]]];
        [self.view addSubview:web];
        
        _web = web;
    }
    return _web;
}

獲取網(wǎng)址并加載:

NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];
[self.web loadRequest:[NSURLRequest requestWithURL:url]];
self.web.delegate = self;

使用代理UIWebViewDelegate:

// 網(wǎng)頁開始加載
- (void)webViewDidStartLoad:(UIWebView *)webView {
//    [MBProgressHUD showMessage:@"稍等,玩命加載中"];
    
    [self.progressLine startLoadingAnimation];
}

// 網(wǎng)頁完成加載
- (void)webViewDidFinishLoad:(UIWebView *)webView {
//    [MBProgressHUD hideHUD];
    
    [self.progressLine endLoadingAnimation];
}

// 網(wǎng)頁加載失敗
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
//    [MBProgressHUD hideHUD];
    
    [self.progressLine endLoadingAnimation];
}

這時候測試一下效果圖:

可根據(jù)自己項目自定義進度條顏色! 希望對您有所幫助!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,184評論 4 61
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,936評論 25 709
  • 從第一次參加拆書幫活動到現(xiàn)在有一個月的時間了,心中感慨越來越多,如今再拿起趙周老師的《這樣讀書就夠了》這本書,思路...
    墨竹_sunshine閱讀 746評論 4 9
  • 今年是猴年上班的最后一天 早晨出門的時候,整個城市已經(jīng)安靜了,車很少。 微微的陽光透過樹葉灑落在路面上,留下了葉子...
    靜靜生長閱讀 293評論 0 1

友情鏈接更多精彩內容