載入webview進度條
阿新 • • 發佈:2019-01-10
繼續將原來的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 UIKit import WebKit class 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 } }