1.完成网页跳转,我们很容易想到利用UIWebView和Safari来实现。其中:
- safari自带的功能交多,前进后退,刷新,进度条,网址等。但是需要跳转 APP,必须打开系统自带的safari程序来打开网页,这样会增大内存消耗。
- webView虽然可以不用打开新的程序来实现跳转网页的功能,但其不能真实实现进度条功能,只能通过假数据模拟。
2. IOS 8.0开始,苹果提供了WKWebview ——webView的升级版,可以实现真实的进度条功能。
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<NSString *,id> *)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];
- push 方式:导航条和tabBar是就是普通push出来的样式
新View出现的方式都是push样式,但是导航条和TabBar不一样,这就说明了present方式弹出控制器是系统在push的方式上做了进一步封装。