Visual_Novel_iOS/crush/Crush/Src/Components/Base/H5Controller.swift

150 lines
5.2 KiB
Swift
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// H5Controller.swift
// E-Wow
//
// Created by dong on 2021/1/6.
//
import UIKit
import WebKit
/**
*/
class H5Controller: H5BaseViewController {
private var bgColor: UIColor = UIColor(hex: "#211A2B")//.purple//.white
private var background = "#211A2B"
private var naviTitleIgnoreAlpha = false
// status
private var h5StatusBarStyle: UIStatusBarStyle = .lightContent
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
setupViewsByBgColor(alpha: 1)
navigationView.backButton.isHidden = false
// navigationView.backButton.setImage(R.image.nav_back(), for: .normal)
// webView.snp.remakeConstraints { make in
// make.top.right.left.bottom.equalTo(self.view)
// }
// if #available(iOS 13.0, *) {
// h5StatusBarStyle = .darkContent
// }else{
// h5StatusBarStyle = .default
// }
// setNeedsStatusBarAppearanceUpdate()
view.bringSubviewToFront(navigationView)
webView.scrollView.delegate = self
}
private func setupViewsByBgColor(alpha: CGFloat) {
navigationView.backgroundColor = bgColor.withAlphaComponent(alpha)
navigationView.titleLabel.alpha = naviTitleIgnoreAlpha ? 1 : alpha
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return h5StatusBarStyle
}
override func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
super.webView(webView, didFinish: navigation)
dlog("webview didFinish: \(webView.url?.absoluteString ?? "null")")
guard let urlPath = webView.url?.absoluteString else {
return
}
adaptPageNavi(uri: urlPath, didFinish: true)
}
override func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
super.webView(webView, decidePolicyFor: navigationAction, decisionHandler: decisionHandler)
guard let urlRequest = navigationAction.request.url?.absoluteString.removingPercentEncoding else {
return
}
adaptPageNavi(uri: urlRequest)
}
private func adaptPageNavi(uri: String?, didFinish: Bool = false) {
guard let uriStr = uri else {
return
}
if uriStr.contains("activity/shoppingMall") {
bgColor = .hexString("F04545")
navigationView.titleLabel.textColor = .white
naviTitleIgnoreAlpha = true
setupViewsByBgColor(alpha: 0)
if didFinish {
navigationView.backButton.setImage(R.image.nav_back_white(), for: .normal)
}
webView.evaluateJavaScript("document.body.style.backgroundColor=\"#F04545\"") { _, _ in
}
} else {
// navigationView.backButton.setImage(R.image.nav_back(), for: .normal)
webView.evaluateJavaScript("document.body.style.backgroundColor=\"\(background)\"") { _, _ in
}
}
}
// MARK: - override
override func handleInit(msg: JSSDKMessage) {
super.handleInit(msg: msg)
if let header = msg.header {
// if let fontColor = header.fontColor {
// navigationView.titleLabel.textColor = UIColor.hexString(fontColor)
// if fontColor == "#FFFFFF" {
// navigationView.backButton.setImage(R.image.nav_back_white(), for: .normal)
// } else {
// navigationView.backButton.setImage(R.image.nav_back(), for: .normal)
// }
// }
if let background = header.background {
self.background = background
bgColor = UIColor.hexString(background)
setupViewsByBgColor(alpha: 1)
}
if header.transparent {
setupViewsByBgColor(alpha: 0)
webView.snp.remakeConstraints { make in
make.top.right.left.bottom.equalTo(self.view)
}
h5StatusBarStyle = .lightContent
setNeedsStatusBarAppearanceUpdate()
} else {
webView.snp.remakeConstraints { make in
make.right.left.bottom.equalTo(self.view)
make.top.equalTo(navigationView.snp.bottom)
}
if #available(iOS 13.0, *) {
h5StatusBarStyle = .darkContent
} else {
h5StatusBarStyle = .default
}
setNeedsStatusBarAppearanceUpdate()
}
}
}
}
extension H5Controller: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
// dlog("offset:\(scrollView.contentOffset.y)")
if scrollView.contentOffset.y <= 60 && scrollView.contentOffset.y >= 0 {
let aspect = scrollView.contentOffset.y / 60.0
setupViewsByBgColor(alpha: aspect)
} else if scrollView.contentOffset.y > 60 {
setupViewsByBgColor(alpha: 1)
} else {
setupViewsByBgColor(alpha: 0)
}
}
}