Swift-WKWebView监听加载进度

调用

     PayWebViewController.showVC(formVC: self, url: "https://www.hao123.com", completion: {
                    DispatchQueue.main.async(execute: {
                        HWPrint("来了")
             })
     })

实现

import UIKit
import WebKit

class PayWebViewController: BaseViewController,WKUIDelegate, WKNavigationDelegate,UIWebViewDelegate {

    private var _url : String?
    var url : String? {
        set {
            _url = newValue
            if newValue == nil {return}
            let request = URLRequest.init(urlString: (newValue)!)
            self.webView.load(request!)
        }
        get {
            return _url
        }
    }
    /// 添加进度条
    lazy private var progressView: UIProgressView = {
        self.progressView = UIProgressView.init(frame: CGRect(x: CGFloat(0), y: 0, width: UIScreen.main.bounds.width, height: 2))
        self.progressView.tintColor = UIColor.green      // 进度条颜色
        self.progressView.trackTintColor = UIColor.white // 进度条背景色
        return self.progressView
    }()
    
    lazy var webView: WKWebView = {
        let webView = WKWebView.init(frame: view.bounds)
        webView.scrollView.bounces = false
        webView.uiDelegate = self
        webView.navigationDelegate = self
        view.addSubview(webView)
        view.addSubview(self.progressView)
        view.bringSubview(toFront: self.progressView) // 将进度条至于最顶层
        webView.addObserver(self, forKeyPath: "estimatedProgress", options: .new, context: nil)
        return webView
    }()
    override func viewDidLoad() {
        super.viewDidLoad()
        navigationItem.title = "支付"
        rightButton()
    }
    func rightButton() {
        weak var weakSelf = self
        let btn = UIButton.init(titleString: "取消", frame: CGRect.init(x: 0, y: 0, width: 60, height: 44)) {
            weakSelf?.dismiss(animated: true, completion: nil)
        }
        btn.titleLabel?.font = UIFont.systemFont(ofSize: 15)
        btn.setTitleColor(UIColor.black, for: .normal)
        self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(customView: btn)
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
      
    }
    
    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        //  加载进度条
        if keyPath == "estimatedProgress"{
            progressView.alpha = 1.0
            HWPrint(self.webView.estimatedProgress)
            progressView.setProgress(Float((self.webView.estimatedProgress) ), animated: true)
            if (self.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!){
        
    }
    
    func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!){

    }
    func webViewDidClose(_ webView: WKWebView) {
        
    }
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        
    }
    deinit {
        self.webView.removeObserver(self, forKeyPath: "estimatedProgress")
        self.webView.uiDelegate = nil
        self.webView.navigationDelegate = nil
    }
 
   /// 快速跳转设置
   class func showVC(formVC:UIViewController,url:String,completion:(()->())?) {
        let vc = PayWebViewController()
        vc.url = url
        let nav = MyNavigationController.init(rootViewController: vc)
        formVC.present(nav, animated: true) {
            if completion == nil {return}
            completion!()
        }
    }

}

你可能感兴趣的:(Swift-WKWebView监听加载进度)