RxWebKit을 사용하여 WKWebView의 로딩 처리 (프로그레스 바 업데이트 등)를 좋은 느낌
개요
RxWebKit
라는 라이브러리를 사용하여 WKWebView 로딩 프로세스의 UI 업데이트 주위를 좋은 느낌으로 쓰는 방법을 소개합니다.RxSwift를 사용하여 WKWebView의 로딩 프로세스를 잘 느낍니다. 기사 계속
이미지
리포지토리
환경
환경 구축
Podfile pod 'RxSwift'
pod 'RxCocoa'
pod 'RxOptional'
pod 'RxWebKit'
화면
pod 'RxSwift'
pod 'RxCocoa'
pod 'RxOptional'
pod 'RxWebKit'
코드
import UIKit
import WebKit
import RxSwift
import RxCocoa
import RxOptional
import RxWebKit
class RxWebkitViewController: UIViewController {
@IBOutlet weak var webView: WKWebView!
@IBOutlet weak var progressView: UIProgressView!
private let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
setupWebView()
}
private func setupWebView() {
// プログレスバーの表示制御、ゲージ制御、アクティビティインジケータ表示制御で使うため、一旦オブザーバを定義
let loadingObservable = webView.rx.loading
.share()
// プログレスバーの表示・非表示
loadingObservable
.map { return !$0 }
.observeOn(MainScheduler.instance)
.bind(to: progressView.rx.isHidden)
.disposed(by: disposeBag)
// iPhoneの上部の時計のところのバーの(名称不明)アクティビティインジケータ表示制御
loadingObservable
.bind(to: UIApplication.shared.rx.isNetworkActivityIndicatorVisible)
.disposed(by: disposeBag)
// NavigationControllerのタイトル表示
webView.rx.title
.filterNil()
.observeOn(MainScheduler.instance)
.bind(to: navigationItem.rx.title)
.disposed(by: disposeBag)
// プログレスバーのゲージ制御
webView.rx.estimatedProgress
.map { return Float($0) }
.observeOn(MainScheduler.instance)
.bind(to: progressView.rx.progress)
.disposed(by: disposeBag)
let url = URL(string: "https://www.google.com/")
let urlRequest = URLRequest(url: url!)
webView.load(urlRequest)
}
}
import UIKit
import WebKit
import RxSwift
import RxCocoa
import RxOptional
import RxWebKit
class RxWebkitViewController: UIViewController {
@IBOutlet weak var webView: WKWebView!
@IBOutlet weak var progressView: UIProgressView!
private let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
setupWebView()
}
private func setupWebView() {
// プログレスバーの表示制御、ゲージ制御、アクティビティインジケータ表示制御で使うため、一旦オブザーバを定義
let loadingObservable = webView.rx.loading
.share()
// プログレスバーの表示・非表示
loadingObservable
.map { return !$0 }
.observeOn(MainScheduler.instance)
.bind(to: progressView.rx.isHidden)
.disposed(by: disposeBag)
// iPhoneの上部の時計のところのバーの(名称不明)アクティビティインジケータ表示制御
loadingObservable
.bind(to: UIApplication.shared.rx.isNetworkActivityIndicatorVisible)
.disposed(by: disposeBag)
// NavigationControllerのタイトル表示
webView.rx.title
.filterNil()
.observeOn(MainScheduler.instance)
.bind(to: navigationItem.rx.title)
.disposed(by: disposeBag)
// プログレスバーのゲージ制御
webView.rx.estimatedProgress
.map { return Float($0) }
.observeOn(MainScheduler.instance)
.bind(to: progressView.rx.progress)
.disposed(by: disposeBag)
let url = URL(string: "https://www.google.com/")
let urlRequest = URLRequest(url: url!)
webView.load(urlRequest)
}
}
webView.rx.title
그런데, navigationItem의 title에 bind하고 있는구나라고 하는 것이 곧 알 수 있다 요약
RxWebKit
를 사용하면 알기 쉽게 UI를 처리 할 수있게되었습니다Notes
RxWebKit
에는 canGoBack
canGoForward
등 더 많은 매개 변수가 있습니다.Reference
이 문제에 관하여(RxWebKit을 사용하여 WKWebView의 로딩 처리 (프로그레스 바 업데이트 등)를 좋은 느낌), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/k0uhashi/items/d07e78c4b693f480983b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)