iOS WKWebView添加网页加载进度条
2016-10-27 15:03
525 查看
一、效果展示
WKWebProgressViewDemo.gif
二、主要步骤
1.添加UIProgressView属性@property (nonatomic, strong) WKWebView *wkWebView; @property (nonatomic, strong) UIProgressView *progressView;
2.初始化progressView
- (void)viewDidLoad { [super viewDidLoad]; //进度条初始化 self.progressView = [[UIProgressView alloc] initWithFrame:CGRectMake(0, 20, [[UIScreen mainScreen] bounds].size.width, 2)]; self.progressView.backgroundColor = [UIColor blueColor]; //设置进度条的高度,下面这句代码表示进度条的宽度变为原来的1倍,高度变为原来的1.5倍. self.progressView.transform = CGAffineTransformMakeScale(1.0f, 1.5f); [self.view addSubview:self.progressView]; }
3.添加KVO,WKWebView有一个属性estimatedProgress,就是当前网页加载的进度,所以监听这个属性。
[self.wkWebView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil];
4.在监听方法中获取网页加载的进度,并将进度赋给progressView.progress
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context { if ([keyPath isEqualToString:@"estimatedProgress"]) { self.progressView.progress = self.wkWebView.estimatedProgress; if (self.progressView.progress == 1) { /* *添加一个简单的动画,将progressView的Height变为1.4倍,在开始加载网页的代理中会恢复为1.5倍 *动画时长0.25s,延时0.3s后开始动画 *动画结束后将progressView隐藏 */ __weak typeof (self)weakSelf = self; [UIView animateWithDuration:0.25f delay:0.3f options:UIViewAnimationOptionCurveEaseOut animations:^{ weakSelf.progressView.transform = CGAffineTransformMakeScale(1.0f, 1.4f); } completion:^(BOOL finished) { weakSelf.progressView.hidden = YES; }]; } }else{ [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; } }
5.在WKWebViewd的代理中展示进度条,加载完成后隐藏进度条
//开始加载 - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation { NSLog(@"开始加载网页"); //开始加载网页时展示出progressView self.progressView.hidden = NO; //开始加载网页的时候将progressView的Height恢复为1.5倍 self.progressView.transform = CGAffineTransformMakeScale(1.0f, 1.5f); //防止progressView被网页挡住 [self.view bringSubviewToFront:self.progressView]; } //加载完成 - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation { NSLog(@"加载完成"); //加载完成后隐藏progressView //self.progressView.hidden = YES; } //加载失败 - (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error { NSLog(@"加载失败"); //加载失败同样需要隐藏progressView //self.progressView.hidden = YES; }
6.在dealloc中取消监听
- (void)dealloc { [self.wkWebView removeObserver:self forKeyPath:@"estimatedProgress"]; }
三、github 代码地址
请戳这里查看demo,如果觉得还不错请随手给个star。文/Jixin(简书作者)
原文链接:http://www.jianshu.com/p/d3c8ba672760
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
相关文章推荐
- iOS WKWebView添加网页加载进度条(转)
- iOS_WKWebView加载本地网页
- iOS WKWebView 加载进度条、导航栏返回&关闭 (Swift 4)
- iOS-仿支付宝加载web网页添加进度条
- iOS实现微信网页进度条,WKWebview进度条的实现
- iOS 加载HTML的相关问题(与JS的互相调用和WKWebView加载本地网页)
- iOS 8 WkWebView 网页的配置和前进,后退,js 交互和进度条的加载
- Android Webview添加网页加载进度条实例详解
- iOS WKWebView 获得title和加载进度
- iOS 8 WkWebView 网页的配置和前进,后退,js 交互和进度条的加载
- webview添加网页加载进度条
- iOS WKWebView添加进度条02
- Android WebView 加载网页添加进度条
- 安卓学习笔记--- 给WebView添加漂亮的加载进度条
- Android中WebView加载网页时,在顶部加上进度条
- 混合开发(一)——WebView开发高级技巧之加载网页以及JavaScript,加载进度条
- ios webview 加载含有中文的URL网页显示白屏
- iOS webView加载网页失败,浏览器成功的原因,以及读取cookie
- WebView学习笔记(一)——网页未完成加载的等待进度条
- 给WebView添加漂亮的加载进度条