继续将原来的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
}
}