参考URL: Swift4のKVOに感動した。
// MARK: - WebView Progress
private var progressView = UIProgressView()
private var observers: [NSKeyValueObservation] = []
private func setUpProgress() {
// NavigationBar下のプログレスバーを生成
let progressHeight: CGFloat = 2.0
let navigationHeight: CGFloat = navigationController?.navigationBar.frame.size.height ?? 46.0
progressView = UIProgressView(frame: CGRect(x: 0.0,
y: navigationHeight - progressHeight,
width: view.bounds.width,
height: progressHeight))
progressView.progressViewStyle = .bar
navigationController?.navigationBar.addSubview(self.progressView)
observeKeysFowWebView()
}
private func observeKeysFowWebView() {
observers.append(webview.observe(\.loading) { (wkWebView, _) in
UIApplication.shared.isNetworkActivityIndicatorVisible = wkWebView.isLoading
let value: Float = wkWebView.isLoading ? 0.1/* プログレスの開始 */ : 1.0 /* プログレスを消去 */
self.progressView.setProgress(value, animated: true)
})
observers.append(webview.observe(\.estimatedProgress, options: .new) { (wkWebView, _) in
self.progressView.setProgress(Float(wkWebView.estimatedProgress), animated: true)
})
}
private func removeObserve() {
observers.forEach { $0.invalidate() }
observers.removeAll()
}