// // AboutVC.swift // QuickLocation // import UIKit import RxSwift import RxCocoa final class AboutVC: BaseViewController { private var rootView: AboutView! private var logoTapCount = 0 private var logoTapResetWork: DispatchWorkItem? override func loadView() { rootView = AboutView(frame: UIScreen.main.bounds) view = rootView } override func viewDidLoad() { super.viewDidLoad() bind() } private func bind() { rootView.navView.onBackTapped = { [weak self] in self?.navigationController?.popViewController(animated: true) } let logoTap = UITapGestureRecognizer(target: self, action: #selector(handleLogoTap)) rootView.logoImage.addGestureRecognizer(logoTap) rootView.feedbackBtn.rx.controlEvent(.touchUpInside) .subscribe(onNext: { _ in AppRouter.push(Route.feedback) }) .disposed(by: disposeBag) rootView.rateBtn.rx.controlEvent(.touchUpInside) .subscribe(onNext: { _ in Self.openAppStoreReview() }) .disposed(by: disposeBag) rootView.agreementBtn.rx.controlEvent(.touchUpInside) .subscribe(onNext: { _ in AppRouter.push(Route.web, userInfo: ["url": URLManager.shared.userAgreementUrl]) }) .disposed(by: disposeBag) rootView.privacyBtn.rx.controlEvent(.touchUpInside) .subscribe(onNext: { _ in AppRouter.push(Route.web, userInfo: ["url": URLManager.shared.privacyPolicyUrl]) }) .disposed(by: disposeBag) rootView.kidsPrivacyBtn.rx.controlEvent(.touchUpInside) .subscribe(onNext: { _ in AppRouter.push(Route.web, userInfo: ["url": URLManager.shared.kidsPrivacyUrl]) }) .disposed(by: disposeBag) } @objc private func handleLogoTap() { #if DEBUG || AdHoc logoTapResetWork?.cancel() logoTapCount += 1 if logoTapCount >= 5 { logoTapCount = 0 showServerSwitchAlert() return } let work = DispatchWorkItem { [weak self] in self?.logoTapCount = 0 } logoTapResetWork = work DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: work) #endif } private func showServerSwitchAlert() { let current = URLManager.shared.apiServerURL let alert = UIAlertController( title: "切换接口", message: "当前:\(current)", preferredStyle: .alert ) alert.addTextField { field in field.placeholder = "自定义接口地址" field.text = current field.keyboardType = .URL field.autocorrectionType = .no field.autocapitalizationType = .none } for preset in URLManager.presetServers { alert.addAction(UIAlertAction(title: preset.title, style: .default) { [weak self] _ in self?.applyServer(url: preset.url, env: preset.env) }) } alert.addAction(UIAlertAction(title: "确定", style: .default) { [weak self] _ in let typed = alert.textFields?.first?.text ?? "" self?.applyServer(url: typed, env: nil) }) alert.addAction(UIAlertAction(title: "取消", style: .cancel)) present(alert, animated: true) } private func applyServer(url: String, env: Int?) { let normalized = URLManager.normalizedServerURL(url) guard !normalized.isEmpty else { DLToast.show(text: "请输入接口地址") return } URLManager.shared.switchServer(url: normalized, env: env) AppDelegate.shared.showMainViewController() } private static func openAppStoreReview() { // Bundle 未配置 appId 时给提示;有则跳转写评价页 let appId = AppSettings.shared.appId guard !appId.isEmpty, let url = URL(string: "itms-apps://itunes.apple.com/app/id\(appId)?action=write-review") else { DLToast.show(text: "暂无法打开评价") return } UIApplication.shared.open(url) } }