jsdw_ios/QuickLocation/Main/BaseViewController/BaseViewController.swift

281 lines
10 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

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.

//
// BaseViewController.swift
// SHECommunity
//
// Created by on 2024/11/25.
//
import UIKit
import RxCocoa
import RxSwift
#if DEBUG || AdHoc
//import FLEX
#endif
class BaseViewController: UIViewController {
var disposeBag = DisposeBag()
/// false
var isNavigationBarHidden: Bool { true }
/// false/true, false
var isChangeNavigationBarStyle: Bool { true }
/// ,
var isShowNavigationBarShadow: Bool { isChangeNavigationBarStyle }
/// default
override var preferredStatusBarStyle: UIStatusBarStyle { .default }
var isPresented: Bool {
return navigationController?.viewControllers.count == 1 &&
navigationController?.presentingViewController != nil
}
///
var navTitle: String = "" {
didSet {
backButton.setTitle(" \(navTitle)", for: .normal)
// navigationItem.title = navTitle
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
fd_prefersNavigationBarHidden = isNavigationBarHidden
view.backgroundColor = ThemeManager.shared.color.backgroundColor
// setupNavigationBar()
setupLeftItem()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let className = String(describing: self.classForCoder)
print(className)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
let className = String(describing: self.classForCoder)
print(className)
}
@objc func dismissClicked(_ item: UIBarButtonItem) {
self.navigationController?.dismiss(animated: true, completion: nil)
}
@objc func leftBackClicked(_ item: UIBarButtonItem) {
self.navigationController?.popViewController(animated: true)
}
private func setupNavigationBar() {
let appearance = UINavigationBarAppearance()
appearance.configureWithOpaqueBackground()
appearance.backgroundImage = UIImage()
appearance.shadowImage = UIImage()
appearance.shadowColor = .clear
appearance.backgroundColor = ThemeManager.shared.color.backgroundColor
navigationController?.navigationBar.standardAppearance = appearance
navigationController?.navigationBar.scrollEdgeAppearance = appearance
}
// MARK: - Left Item
func setupLeftItem() {
guard !isNavigationBarHidden else { return }
if isPresented {
let dismissItem = UIBarButtonItem(image: UIImage(named: "Common/close")?.adaptiveImage,
style: .plain,
target: self,
action: #selector(dismissClicked(_:)))
dismissItem.tintColor = .white
navigationItem.leftBarButtonItem = dismissItem
} else if let count = navigationController?.viewControllers.count, count > 1 {
let leftBarBtn = UIBarButtonItem (customView: backButton)
//
let spacer = UIBarButtonItem (barButtonSystemItem: .fixedSpace, target: nil, action: nil)
spacer.width = -10
navigationItem.leftBarButtonItem = leftBarBtn
// navigationItem.leftBarButtonItems = [spacer, leftBarBtn]
// let leftBackItem = UIBarButtonItem(image: UIImage(named: "Common/back"),
// style: .plain,
// target: self, action: #selector(leftBackClicked(_:)))
// leftBackItem.tintColor = .white
// navigationItem.leftBarButtonItem = leftBackItem
}
}
lazy var backButton: UIButton = {
let button = UIButton (type: .custom)
button.frame = CGRectMake (0, 0, 200, 30)
button.setImage(UIImage(named: "Common/back"), for: .normal)
button.titleLabel?.font = .systemFont(ofSize: 18, weight: .medium)
button.contentHorizontalAlignment = .left
button.setTitleColor(ThemeManager.shared.color.titleColor, for: .normal)
button.addTarget(self, action: #selector(leftBackClicked(_:)), for: .touchUpInside)
return button
}()
}
// MARK: -
extension BaseViewController {
func requestSmsCode(phone: String,
sendBtn: UIButton,
countDownService: CountDownService) {
DLToast.showLoading()
SystemService.sendSmsCode(phone: phone).subscribe(onNext: { [weak self] response in
DLToast.showSuccess(text: response.message ?? "发送成功")
guard let self = self else { return }
self.startCountDown(sendBtn, countDownService)
}, onError: { _ in }).disposed(by: disposeBag)
}
func startCountDown(_ sendBtn: UIButton, _ countDownService: CountDownService) {
countDownService.startTimer()
countDownService.currentTime.subscribe(onNext: { time in
DispatchQueue.main.async {
var timeStr = ""
if time == 0 {
sendBtn.isEnabled = true
sendBtn.isUserInteractionEnabled = true
timeStr = "获取验证码"
NSObject.cancelPreviousPerformRequests(withTarget: self)
}
else {
sendBtn.isEnabled = false
sendBtn.isUserInteractionEnabled = false
timeStr = "\(time.string)s"
}
sendBtn.setTitle(timeStr, for: .normal)
}
}).disposed(by: disposeBag)
}
}
// MARK: -
extension BaseViewController {
func showBigImage(imgUrlList: [String], currentPage: Int, projectiveView: UIView?=nil) {
// var tempProjectiveView = projectiveView
// if tempProjectiveView == nil {
// tempProjectiveView = UIView(frame: CGRect(origin: CGPoint(x: kScreenWidth * 0.5, y: kScreenHeight), size: CGSize(width: 1, height: 1)))
// }
// var datas: [YBIBDataProtocol] = []
// GlobalAsync {
// for mediaUrl in imgUrlList {
// //
// if mediaUrl.hasSuffix(".mp4") {
// let videoData = YBIBVideoData()
// videoData.videoURL = URL(string: mediaUrl)
// videoData.projectiveView = tempProjectiveView
// datas.append(videoData)
// }
// //
// else if mediaUrl.hasPrefix("http") {
// let imageData = YBIBImageData()
// imageData.imageURL = URL(string: mediaUrl)
// imageData.projectiveView = tempProjectiveView
// datas.append(imageData)
// }
// }
// MainAsync {
// // /
// let browser = YBImageBrowser()
// browser.dataSourceArray = datas
// browser.currentPage = currentPage
// browser.show()
// }
// }
}
}
// MARK: - FLEX
extension BaseViewController {
private func setupFlex() {
#if DEBUG || AdHoc
// FLEXManager.shared.showExplorer()
#endif
}
override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
print("摇晃结束")
setupFlex()
}
}
// MAKR: - UIView
extension UIView {
func showBigImage(imgUrlList: [String], currentPage: Int, projectiveView: UIView?=nil) {
// var tempProjectiveView = projectiveView
// if tempProjectiveView == nil {
// tempProjectiveView = UIView(frame: CGRect(origin: CGPoint(x: kScreenWidth * 0.5, y: kScreenHeight), size: CGSize(width: 1, height: 1)))
// }
// var datas: [YBIBDataProtocol] = []
// GlobalAsync {
// for mediaUrl in imgUrlList {
// //
// if mediaUrl.hasSuffix(".mp4") {
// let videoData = YBIBVideoData()
// videoData.videoURL = URL(string: mediaUrl)
// videoData.projectiveView = tempProjectiveView
// datas.append(videoData)
// }
// //
// else if mediaUrl.hasPrefix("http") {
// let imageData = YBIBImageData()
// imageData.imageURL = URL(string: mediaUrl)
// imageData.projectiveView = tempProjectiveView
// datas.append(imageData)
// }
// }
// MainAsync {
// // /
// let browser = YBImageBrowser()
// browser.dataSourceArray = datas
// browser.currentPage = currentPage
// browser.show()
// }
// }
}
}
// MARK: - PagerView
enum ScrollState {
case scrolling
case pending
case ended
}
enum LastDirection {
case up
case down
}
class PagerScrollView: UIScrollView {
weak var panDelegate: UIGestureRecognizerDelegate?
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
if let delegate = panDelegate {
if let result = delegate.gestureRecognizer?(gestureRecognizer, shouldRecognizeSimultaneouslyWith: otherGestureRecognizer) {
return result
}
}
return false
}
}
class PagerTableView: UITableView {
weak var panDelegate: UIGestureRecognizerDelegate?
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
if let delegate = panDelegate {
if let result = delegate.gestureRecognizer?(gestureRecognizer, shouldRecognizeSimultaneouslyWith: otherGestureRecognizer) {
return result
}
}
return false
}
}