Swift

来源:互联网 发布:沼泽人 知乎 编辑:程序博客网 时间:2024/05/17 02:52

继续将原来的Objective-C改写成Swift。项目中,webview几乎是一个必不可少的控件,最起码,免责声明,注册协议得用吧? 而使用的时候,要么是要给webview添加加载框,要么是使用进度条,来提醒用户等待webview展示。加载框就不说了,MBP,相信很多人在使用,这里说说加载进度条,在iOS8以后,WKWebview带有的一个属性,便是进度参数  estimatedProgress。 此篇,我们将使用此参数,来绘制进度条。代码如下: 

////  WKWebview_VC.swift//  WebView进度条////  Created by YLJ on 2017/6/21.//  Copyright © 2017年 YLJ. All rights reserved.//import UIKitimport WebKitclass WKWebview_VC: UIViewController, WKUIDelegate, WKNavigationDelegate {    lazy private var webview: WKWebView = {        self.webview = WKWebView.init(frame: self.view.bounds)        self.webview.uiDelegate = self        self.webview.navigationDelegate = self        return self.webview    }()        lazy private var progressView: UIProgressView = {        self.progressView = UIProgressView.init(frame: CGRect(x: CGFloat(0), y: CGFloat(65), width: UIScreen.main.bounds.width, height: 2))        self.progressView.tintColor = UIColor.green      // 进度条颜色        self.progressView.trackTintColor = UIColor.white // 进度条背景色        return self.progressView    }()        override func viewDidLoad() {        super.viewDidLoad()        view.addSubview(webview)        view.addSubview(progressView)                webview.addObserver(self, forKeyPath: "estimatedProgress", options: .new, context: nil)        webview.load(URLRequest.init(url: URL.init(string: "https://www.baidu.com/")!))    }        override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {                if keyPath == "estimatedProgress"{            progressView.alpha = 1.0            progressView.setProgress(Float(webview.estimatedProgress), animated: true)            if webview.estimatedProgress >= 1.0 {                UIView.animate(withDuration: 0.3, delay: 0.1, options: .curveEaseOut, animations: {                    self.progressView.alpha = 0                }, completion: { (finish) in                    self.progressView.setProgress(0.0, animated: false)                })            }        }    }        func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {        print("开始加载")    }        func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {        print("开始获取网页内容")    }        func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {        print("加载完成")    }        func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {        print("加载失败")    }        func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {        decisionHandler(.allow);    }       override func didReceiveMemoryWarning() {        super.didReceiveMemoryWarning()    }        deinit {        webview.removeObserver(self, forKeyPath: "estimatedProgress")        webview.uiDelegate = nil        webview.navigationDelegate = nil    }}



原创粉丝点击