//
|
// AgreementView.swift
|
// OKProject
|
//
|
// Created by alvin_y on 2020/5/27.
|
// Copyright © 2020 yangwang. All rights reserved.
|
//
|
|
import UIKit
|
import RxCocoa
|
import RxSwift
|
import WebKit
|
/// 协议
|
class AgreementView: YYView {
|
|
/// 协议类型
|
enum AgreementType {
|
/// 隐私
|
case privacy
|
/// 用户
|
case user
|
}
|
|
/// 容器
|
@IBOutlet weak var view_container: YYView!
|
|
/// 不同意并退出
|
@IBOutlet weak var button_exit: YYButton!
|
|
/// 同意
|
@IBOutlet weak var button_agree: YYButton!
|
|
/// web容器
|
@IBOutlet weak var view_webcontainer: UIView!
|
|
/// 用户协议
|
@IBOutlet weak var button_userAgreement: UIButton!
|
|
/// 隐私协议
|
@IBOutlet weak var button_privacyAgreement: UIButton!
|
|
/// WebView
|
var webView: WKWebView!
|
|
/// 协议类型
|
let agreementType = BehaviorRelay<AgreementType>(value: .privacy)
|
|
let disposeBag = DisposeBag()
|
|
/// 同意协议
|
let agree = Delegate<Void, Void>()
|
|
let viewModel = AgreementViewModel()
|
/// 获取Self
|
/// - Returns: Self
|
class func instance() -> AgreementView {
|
let v = UINib(nibName: "AgreementView", bundle: nil).instantiate(withOwner: self, options: nil).first as! AgreementView
|
v.setupViews()
|
v.viewModel.agreement()
|
v.bindRx()
|
v.defineLayouts()
|
return v
|
}
|
|
//MARK: - UI
|
func setupViews() {
|
self.frame = UIScreen.main.bounds
|
self.view_container.transform = CGAffineTransform.init(translationX: 0, y: screenH)
|
let jsString = "var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width, initial-scale=1.0, minimum-scale=1, maximum-scale=1, user-scalable=no'); document.getElementsByTagName('head')[0].appendChild(meta);"
|
let userScript = WKUserScript(source: jsString, injectionTime: .atDocumentEnd, forMainFrameOnly: true)
|
let userContentController = WKUserContentController()
|
userContentController.addUserScript(userScript)
|
|
let webViewConfiguration = WKWebViewConfiguration()
|
webViewConfiguration.userContentController = userContentController
|
webView = WKWebView(frame: CGRect.zero, configuration: webViewConfiguration)
|
self.view_webcontainer.addSubview(webView)
|
}
|
|
//MARK: - Layouts
|
func defineLayouts() {
|
webView.snp.makeConstraints { (make) in
|
make.edges.equalToSuperview()
|
}
|
}
|
|
//MARK: - Rx
|
func bindRx() {
|
agreementType.subscribe(onNext: {[unowned self] (t) in
|
switch t{
|
case .privacy:
|
self.viewModel.type.accept(.privacy)
|
self.updateButtonBackgroundColor(sender: self.button_privacyAgreement)
|
|
break
|
case .user:
|
self.viewModel.type.accept(.userAgreement)
|
self.updateButtonBackgroundColor(sender: self.button_userAgreement)
|
|
break
|
}
|
|
self.viewModel.agreement()
|
}).disposed(by: disposeBag)
|
|
button_userAgreement.rx.tap.subscribe(onNext: {[unowned self] (_) in
|
self.agreementType.accept(.user)
|
|
}).disposed(by: disposeBag)
|
|
button_privacyAgreement.rx.tap.subscribe(onNext: {[unowned self] (_) in
|
self.agreementType.accept(.privacy)
|
|
}).disposed(by: disposeBag)
|
|
button_agree.rx.tap.subscribe(onNext: {[unowned self] (_) in
|
self.dismiss()
|
UserDefaults.standard.set(true, forKey: AgreeNotification)
|
UserDefaults.standard.synchronize()
|
self.agree.call()
|
}).disposed(by: disposeBag)
|
|
button_exit.rx.tap.subscribe(onNext: { (_) in
|
exit(0)
|
}).disposed(by: disposeBag)
|
|
loadHtml()
|
}
|
func loadHtml(){
|
viewModel.requestSubject.subscribe { (status) in
|
switch status {
|
|
case .loading:
|
break
|
case .success(let data):
|
guard let model = data as? SwitchCityModel else { return }
|
self.request(url: model.content)
|
break
|
case .error(_):
|
break
|
}
|
} onError: { (e) in
|
|
} onCompleted: {
|
|
} onDisposed: {
|
|
}.disposed(by: disposeBag)
|
}
|
|
/// 显示
|
func show() {
|
app.window?.addSubview(self)
|
UIView.animate(withDuration: 0.2) {
|
self.view_container.transform = CGAffineTransform.identity
|
}
|
}
|
|
/// 隐藏
|
func dismiss() {
|
UIView.animate(withDuration: 0.2, animations: {
|
self.view_container.transform = CGAffineTransform.init(translationX: 0, y: screenH)
|
}) { (_) in
|
self.removeFromSuperview()
|
}
|
|
}
|
|
|
/// 请求数据
|
/// - Parameter url: 网址
|
func request(url: String) {
|
if url != "" {
|
if let url = URL.init(string: url), UIApplication.shared.canOpenURL(url) {
|
webView.load(URLRequest.init(url: url))
|
}else{
|
webView.loadHTMLString(url.adaptWebViewForHtml(), baseURL: nil)
|
}
|
}
|
}
|
|
/// 更新按钮背景色
|
/// - Parameter sender: 当前按钮
|
func updateButtonBackgroundColor(sender: UIButton) {
|
let button = [button_privacyAgreement,button_userAgreement]
|
for item in button{
|
item?.isSelected = item == sender
|
item?.backgroundColor = item == sender ? ThemeColor : UIColor.color(light: UIColor.color(hexString: "#FFFFFF"), dark: UIColor.color(hexString: "#FFFFFF"))
|
}
|
}
|
}
|