网页跳转-WKWebView和SFSafariViewController详解

1.完成网页跳转,我们很容易想到利用UIWebView和Safari来实现。其中:
  • safari自带的功能交多,前进后退,刷新,进度条,网址等。但是需要跳转 APP,必须打开系统自带的safari程序来打开网页,这样会增大内存消耗。
  • webView虽然可以不用打开新的程序来实现跳转网页的功能,但其不能真实实现进度条功能,只能通过假数据模拟。

2. IOS 8.0开始,苹果提供了WKWebview ——webView的升级版,可以实现真实的进度条功能。
网页跳转-WKWebView和SFSafariViewController详解_第1张图片
加载中.png
网页跳转-WKWebView和SFSafariViewController详解_第2张图片
加载完成.png

WKWebview 实现真实进度条步骤:

  • 1.通过拖控件或者代码的方式添加一个UIProgressView,用于显示加载进度。
  • 2.创建网路请求对象,利用UIProgressView对象加载该请求
/创建网络请求对象
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:self.url]];
    //加载请求对象
    [webView loadRequest:request];
  • 3.监听progress的变化
[webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    self.mineProgressView.progress = [change[@"new"]floatValue];
    //加载完成移除进度条
    self.mineProgressView.hidden = self.mineProgressView.progress >= 1;
    
}
  • 4.移除观察者
//移除观察者
- (void)dealloc {
    [self.webView removeObserver:self forKeyPath:@"estimatedProgress"];
}


3.SFSafariViewController (iOS 9.0)
  • 不再需要跳转APP
  • 跳转控制器用present,此时效果为modal,因为系统底层给modal的方式做了封装。
  • present方式:导航条和tabBar是safari样式的
SFSafariViewController * safari = [[SFSafariViewController alloc]initWithURL:[NSURL URLWithString:detailPath]];
[self presentViewController:safari animated:YES completion:nil];
网页跳转-WKWebView和SFSafariViewController详解_第3张图片
present方式.png
  • push 方式:导航条和tabBar是就是普通push出来的样式
网页跳转-WKWebView和SFSafariViewController详解_第4张图片
push方式.png

新View出现的方式都是push样式,但是导航条和TabBar不一样,这就说明了present方式弹出控制器是系统在push的方式上做了进一步封装。

你可能感兴趣的:(网页跳转-WKWebView和SFSafariViewController详解)