ios webview 进度条展示(二)使用

之前我写过一个用于实现webview的简单进度条,文章地址:http://blog.csdn.net/flytosky_l/article/details/61915771

我在之前的文章中也翻译过苹果官方文档关于WKWebView的基本使用,文章地址:http://blog.csdn.net/flytosky_l/article/details/61924081

这里我参考网上代码和自己的实践,使用WKWebView加载网页是,进度条的展示,有疏漏错误,欢迎指出。

对于WKWebView,它支持苹果8.0以及更高版本,所以需要兼容8.0以下版本的应用,不建议使用。之前我的一篇文章,使用UIWebView加载进度条,实际只是一个虚拟展示的进度条,同样可以在WKWebView加载网页时使用,但是这里使用的进度条展示,则不再适用于UIWebView,从这里看,貌似WKWebView似乎更为强大,其实从苹果的官方文档中对比UIWebView和WKWebView,你应该同样有这样的感觉吧(这个只是我个人观点)。

代码示例:(使用xcode7.3 swift2.2)

//

import UIKit
import WebKit
class WKWebViewController: UIViewController , WKUIDelegate {

    var webView : WKWebView?
    var urlString = "https://www.apple.com"
    var progressBar : UIProgressView?

    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = UIColor.grayColor()
        let rect = UIScreen.mainScreen().bounds
        let webConfiguratiojn = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguratiojn)//初始化
        webView!.frame = CGRectMake(0.0, 0.0, rect.width, rect.height)
        webView!.backgroundColor = UIColor.whiteColor()//设置背景颜色
        self.view.addSubview(webView!)//添加到View
        progressBar = UIProgressView()//进度条控件初始化
        progressBar!.frame = CGRectMake(0.0, 64.0, rect.width, 2)
        view.addSubview(progressBar!)//添加到View
        webView!.UIDelegate = self//设置WKWebView控件的代理
        let request = NSURLRequest.init(URL: NSURL.init(string: urlString)!)
        webView!.loadRequest(request)//加载网络

        webView!.addObserver(self, forKeyPath: "estimatedProgress", options: NSKeyValueObservingOptions.New, context: nil)//添加观察者

    }
    //观察者的监听
    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer) {
        if keyPath == "title" {//如果加载完成,keypath值为标题时,设置界面的标题
            self.title = self.webView!.title
        } else if keyPath == "estimatedProgress" {//如果为添加的观察者,设置进度条的加载进度 estimatedProgress是苹果提供给开发者的网页加载的进度
            self.progressBar!.progress = Float(self.webView!.estimatedProgress)
        }
        if object?.isKindOfClass(WKWebView) == true && keyPath! == "estimatedProgress" {//判断观察者为WKWebView时,监听keypath为之前的添加estimatedProgress
//            var newprogress = change?.indexForKey(NSKeyValueChangeNewKey)//这个是获取进度的一种方式

            let newprogress = Float((self.webView?.estimatedProgress)!)//获取WKWebView的加载进度
            
            if newprogress == 1.0 {//加载完成,隐藏进度条,并将其回复到加载进度的初始值
                self.progressBar!.hidden = true
                self.progressBar!.setProgress(0.0, animated: false)
            }else{//未完成,随时改变加载的进度
                self.progressBar!.hidden = false
                self.progressBar!.setProgress(0.5, animated: true)
            }
            
        }
        
    }
    //内存和性能的管理,在界面销毁时,需要注销添加的观察者
    deinit {
    
        webView?.removeObserver(self, forKeyPath: "estimatedProgress")
    }

}
源码地址:

https://github.com/feifeiios/WebviewTest

你可能感兴趣的:(ios笔记,swift)