簡單,使用WKWebView
展示網頁一直不是之前開發的重點,所以之前一直在用UIWebView展示網頁,這周打算對專案中的網頁展示部分做一次優化。
首先使用WKWebView取代UIWebView,其實WKWebView在iOS8就已經公佈了,其效能比UIWebView提高許多,CPU使用降低,2d和3d的表現都明顯增強等優點,網上找了一些比較文章。
簡單的使用WKWebView
一些基本定義
import WebKit
//因為SB中沒有可用的空間,所以只能程式碼新增
var webView = WKWebView()
在ViewDidLoad中定義大小並加入到自定義個containerView中
self.webView.frame = CGRect(x:0, y: 0, width: view.frame.width, height: view.frame.height - 66)
self.containerView.addSubview(webView)
開啟URL
let url = NSURL(string:"http://www.jellytech.com.au")
let request = NSURLRequest(URL:url!)
webView.loadRequest(request)
完成以上內容,基本上已經可以開啟一個網頁了
Delegate方法
extension WebViewController: WKNavigationDelegate{
func webView(webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
print("didStartProvisionalNavigation")
}
func webView(webView: WKWebView, didCommitNavigation navigation: WKNavigation!) {
print("didCommitNavigation")
}
func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
print("didFinishNavigation")
}
func webView(webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: NSError) {
print("didFailProvisionalNavigation")
}
func webView(webView: WKWebView, didFailNavigation navigation: WKNavigation!, withError error: NSError) {
print("didFailNavigation")
}
}
第二部分是新增 一個簡單的Progressbar
先在SB裡定義了一個ProgressView
@IBOutlet weak var progressView: UIProgressView!
ViewDidLoad中,可以考慮放在containerView的下面
//替換self.containerView.addSubview(webView)
self.containerView.insertSubview(webView, belowSubview: progressView)
//ViewDidLoad中,新增一個KVO
webView.addObserver(self, forKeyPath: "estimatedProgress", options: .New, context: nil)
過載方法,網上有許多不同的進度條值的寫法,這個算最簡單的
//swift 2.2
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if (keyPath == "estimatedProgress") {
progressView.hidden = webView.estimatedProgress == 1
progressView.setProgress(Float(webView.estimatedProgress), animated: true)
}
}
最後重點中的重點,特別是對於新手而言,是大部分教程裡沒有提到的部分,就是離開這個頁面的時候請記得移除observer,不然系統會報錯!!!
override func viewWillDisappear(animated: Bool) {
webView.removeObserver(self, forKeyPath: "estimatedProgress")
super.viewWillDisappear(true)
}
結尾
突然感到有時間應該整理一下KVO的相關知識。
補充
當從webview介面返回上一頁面時,系統奔潰,並且提示新增malloc_error_break(新增方法)。之前在使用UIWebView時,同樣的寫法並沒有出現這個問題。
經過檢查發現是因為“使用UIScrollViewDelegate”引起的。但是即使新增了malloc_error_break,因為apple給的說明幾乎沒用,所以在網上繼續搜尋一番,發現了一個解決方法, 在deinit中把scrollview的delegate清空。
deinit {
webView.scrollView.delegate = nil
}
終於不報錯了...
相關文章
- IOS中WKWebView 簡單使用iOSWebView
- 簡單說說iOS之WKWebView的用法iOSWebView
- WKWebView 的使用WebView
- iOS WKWebView的使用iOSWebView
- iOS WKWebView 基本使用iOSWebView
- WKWebview 的使用及坑WebView
- 使用WKWebView替換UIWebViewWebViewUI
- 簡單使用 rocketmqMQ
- GCDAsyncSocket 簡單使用GC
- JPTabBar簡單使用tabBar
- Quartz 簡單使用quartz
- Github 簡單使用Github
- gorm 簡單使用GoORM
- ListView簡單使用View
- GCD簡單使用GC
- git簡單使用Git
- sftp簡單使用FTP
- redux簡單使用Redux
- jq 簡單使用
- Kdevelop的簡單使用和簡單除錯dev除錯
- iOS中WKWebView互動使用總結iOSWebView
- WKWebView詳解&WKWebVieW和JS互動WebViewJS
- prometheus 簡單使用及簡單 middleware 開發Prometheus
- butterfly簡單使用教程
- docker的簡單使用Docker
- postman的簡單使用Postman
- RecyclerView的簡單使用View
- git的簡單使用Git
- java 反射簡單使用Java反射
- WebWorker 簡單使用方式Web
- BootStrapValidate 簡單使用boot
- docker命令簡單使用Docker
- LayUi的簡單使用UI
- elastic APM 簡單使用AST
- RocketMQ的簡單使用MQ
- apijson簡單使用APIJSON
- Vue簡單的使用Vue
- java 簡單使用redisJavaRedis