UIWebview-----添加進(jìn)度條

為了項(xiàng)目的敏捷性和簡(jiǎn)單性,現(xiàn)在的app常常會(huì)嵌入不少的H5頁(yè)面,而如何優(yōu)雅的顯示這些web頁(yè)面呢,我這里參照微信顯示web頁(yè)面的方式,做了一個(gè)導(dǎo)航欄下的加載進(jìn)度條

我這里面提供兩種方式捺典,一個(gè)是github上開源的類庫(kù)干旁,獲取真的加載進(jìn)度,但是webview的加載時(shí)開始的時(shí)候比較慢愤惰,后來(lái)的進(jìn)度一下子就完成了包归,個(gè)人感覺這樣的效果體驗(yàn)不太好锨推,所以這里我采用的是假的加載進(jìn)度,讓用戶感覺在一直的加載

Simulator Screen Shot 2016年11月28日 23.40.44.png

代碼如下:
建立XSQWebProgressView 繼承 CAShapeLayer
.h 中

#import <QuartzCore/QuartzCore.h>

@interface XSQWebProgressView : CAShapeLayer
- (void)speedLoad;
- (void)startLoad;
- (void)closeTimer;

@end

.m 中

#import "XSQWebProgressView.h"
#import <UIKit/UIKit.h>
static NSTimeInterval const tiemInterval = 0.01;
@implementation XSQWebProgressView{
    CAShapeLayer *_layer;
    NSTimer *_timer;
    CGFloat _speed;
    BOOL _isSpeedLoad;
}
- (instancetype)init {
    if (self = [super init]) {
        [self initialize];
    }
    return self;
}
- (void)initialize{
    self.lineWidth = 2;
    self.strokeColor = [UIColor greenColor].CGColor;
    _timer = [NSTimer scheduledTimerWithTimeInterval:tiemInterval target:self selector:@selector(pathChanged:) userInfo:nil repeats:YES];
    [self pause];
    
    UIBezierPath *path = [UIBezierPath bezierPath];
    [path moveToPoint:CGPointMake(0, 2)];
    [path addLineToPoint:CGPointMake([UIScreen mainScreen].bounds.size.width, 2)];
    
    self.path = path.CGPath;
    self.strokeEnd = 0;
    _speed = 0.001;
    _isSpeedLoad = NO;
}

- (void)pathChanged:(NSTimer *)timer {
    if (_isSpeedLoad) {
        //頁(yè)面加載完后開始加速加速進(jìn)度條
        self.strokeEnd +=0.02;
    }else{
        //頁(yè)面沒有加載完是慢慢的加載
        if (self.strokeEnd <= 0.8) {
             self.strokeEnd += 0.005;
        }
    }
    //進(jìn)度條加載完后移除掉
    if (self.strokeEnd>=1.0) {
        [self closeTimer];
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            self.hidden = YES;
            [self removeFromSuperlayer];
        });
    }
}
- (void)dealloc {
    //   NSLog(@"progressView dealloc");
    [self closeTimer];
}

#pragma mark - private
- (void)closeTimer {
    [_timer invalidate];
    _timer = nil;
}

- (void)pause{
    if ([_timer isValid]) {
        [_timer setFireDate:[NSDate distantFuture]];
    }
}
- (void)startLoad {
    if ([_timer isValid]) {
        [_timer setFireDate:[NSDate dateWithTimeIntervalSinceNow:tiemInterval]];
    }
}
- (void)speedLoad{
    _isSpeedLoad = YES;
}
@end

使用起來(lái)比較簡(jiǎn)單公壤,代碼如下:

#import "XSQWebProgressView.h"
@interface WebViewController ()<UIWebViewDelegate>
@property (nonatomic, strong) UIWebView * web;
@property (nonatomic, strong) XSQWebProgressView * progressView;
@end

@implementation WebViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.web = [[UIWebView alloc]initWithFrame:self.view.bounds];
    [self.web loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https:www.baidu.com"]]];
    self.web.backgroundColor = [UIColor whiteColor];
    self.web.delegate = self;
    [self.view addSubview:self.web];
    self.progressView = [XSQWebProgressView new];
    self.progressView.frame = CGRectMake(0, 42, [UIScreen mainScreen].bounds.size.width, 2);
    [self.navigationController.navigationBar.layer addSublayer:self.progressView];
}
#pragma mark - UIWebViewDelegate
- (void)webViewDidStartLoad:(UIWebView *)webView {
    [self.progressView startLoad];
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    [self.progressView speedLoad];
    self.title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
    [self.progressView speedLoad];
}
- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    [self.progressView closeTimer];
    [self.progressView removeFromSuperlayer];
    self.progressView = nil;
}

@end

下面我來(lái)簡(jiǎn)單介紹一下我的思想换可,給webview添加一個(gè)進(jìn)度可以很大程度上條高用戶的體驗(yàn),如上前面所說(shuō)厦幅,通過(guò)獲取webview的真實(shí)進(jìn)度沾鳄,webview剛開始加載的慢后來(lái)又太快,用戶體驗(yàn)也不是太好确憨,所以這里我自己模擬一個(gè)進(jìn)度條來(lái)加載译荞。
在webview沒有加載完之前,是通過(guò)定時(shí)器模擬進(jìn)度慢慢加載的等webview加載完后再快速加載休弃,讓用戶感覺到webview在一直的加載吞歼,提高用戶體驗(yàn)

本文的源碼下載地址:https://github.com/xiaoshunliang/XSQWebProgressViewDemo

這個(gè)是開源的根據(jù)實(shí)際進(jìn)度加載進(jìn)度的,可搜一下github上的NJKWebViewProgress

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末塔猾,一起剝皮案震驚了整個(gè)濱河市篙骡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌丈甸,老刑警劉巖医增,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異老虫,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)茫多,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門祈匙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事夺欲」虻郏” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵些阅,是天一觀的道長(zhǎng)伞剑。 經(jīng)常有香客問(wèn)我,道長(zhǎng)市埋,這世上最難降的妖魔是什么黎泣? 我笑而不...
    開封第一講書人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮缤谎,結(jié)果婚禮上抒倚,老公的妹妹穿的比我還像新娘。我一直安慰自己坷澡,他們只是感情好托呕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著频敛,像睡著了一般项郊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上斟赚,一...
    開封第一講書人閱讀 51,231評(píng)論 1 299
  • 那天着降,我揣著相機(jī)與錄音,去河邊找鬼汁展。 笑死鹊碍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的食绿。 我是一名探鬼主播侈咕,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼器紧!你這毒婦竟也來(lái)了耀销?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤铲汪,失蹤者是張志新(化名)和其女友劉穎熊尉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掌腰,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狰住,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了齿梁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片催植。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肮蛹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出创南,到底是詐尸還是另有隱情伦忠,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布稿辙,位于F島的核電站昆码,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏邻储。R本人自食惡果不足惜赋咽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芥备。 院中可真熱鬧冬耿,春花似錦、人聲如沸萌壳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)袱瓮。三九已至缤骨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尺借,已是汗流浹背绊起。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留燎斩,地道東北人虱歪。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像栅表,于是被迫代替她去往敵國(guó)和親笋鄙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,085評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)怪瓶、插件萧落、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,096評(píng)論 4 62
  • 談情說(shuō)愛是辛苦的事,我好像總是在偷懶……
    八步趕蟬_7ab7閱讀 164評(píng)論 1 0
  • 今天帶笑笑去看了電影《大耳朵圖圖之美食狂想曲》洗贰。講的是每一個(gè)孩子都是有特殊才能存在的找岖,也許你現(xiàn)在還沒有發(fā)現(xiàn)...
    賈若依閱讀 159評(píng)論 0 0
  • 該放手的就要放手,屬于你的別人搶也搶不到敛滋,但是不屬于你的也就不要強(qiáng)求许布。生活本是如此,經(jīng)歷了錯(cuò)過(guò)绎晃,才是為了更美好的相...
    奮斗中的柚子姑娘閱讀 243評(píng)論 0 2