美文网首页iOS DeveloperiOS学习笔记程序员
网页跳转-WKWebView和SFSafariViewContr

网页跳转-WKWebView和SFSafariViewContr

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

    2. IOS 8.0开始,苹果提供了WKWebview ——webView的升级版,可以实现真实的进度条功能。
    加载中.png 加载完成.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<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];
    
    present方式.png
    • push 方式:导航条和tabBar是就是普通push出来的样式
    push方式.png

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

    相关文章

      网友评论

        本文标题:网页跳转-WKWebView和SFSafariViewContr

        本文链接:https://www.haomeiwen.com/subject/rsqnjttx.html