// // ItineraryTraceView.swift // QuickLocation // // Created by 八条 on 2026/6/30. // import UIKit import RxSwift import RxCocoa import AMapNaviKit class ItineraryTraceView: UIView { var disposeBag = DisposeBag() private func setupRx() { backBtn.rx.tap.subscribe(onNext: { _ in AppRouter.shared.popOrDismiss() }).disposed(by: disposeBag) } private func setupUI() { addSubview(mapView) addSubview(navBgView) addSubview(navBarView) navBarView.addSubview(backBtn) navBarView.addSubview(navTitleLabel) mapView.layoutChain .edges() navBgView.layoutChain .edges(excludingEdge: .bottom) .heightToWidth(160/375) navBarView.layoutChain .edges(excludingEdge: .bottom) .height(kNaviHeight) backBtn.layoutChain .centerY(navTitleLabel) .left(15) .width(24).height(24) navTitleLabel.layoutChain .top(kStatusBarHeight + 12) .centerX() } // MARK: - Views lazy var navBgView: UIImageView = { let iv = UIImageView() iv.image = UIImage(named: "Common/navBar_bg_2") iv.contentMode = .scaleAspectFill return iv }() lazy var navBarView: UIView = { let v = UIView() v.backgroundColor = .clear return v }() lazy var backBtn: UIButton = { let btn = UIButton(type: .custom) btn.setImage(UIImage(named: "Common/back"), for: .normal) btn.extendEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 30) return btn }() lazy var navTitleLabel: UILabel = { let label = UILabel() label.font = .systemFont(ofSize: 18, weight: .medium) label.textColor = ThemeManager.shared.color.titleAuxColor label.text = "行程轨迹" return label }() lazy var deleteBtn: UIButton = { let btn = UIButton() btn.setImage(UIImage(named: "Common/delete"), for: .normal) btn.extendEdgeInsets = UIEdgeInsets(top: 15, left: 20, bottom: 15, right: 15) btn.isHidden = true return btn }() lazy var mapView: MAMapView! = { let mv = MAMapView() mv.zoomLevel = 14 mv.showsUserLocation = false mv.showsCompass = false mv.userTrackingMode = .none DispatchQueue.main.async { mv.logoCenter = CGPoint(x: mv.bounds.width - 55, y: kNaviHeight) } return mv }() lazy var bottomView: UIView = { let view = UIView() view.backgroundColor = .white view.layer.cornerRadius = 20 view.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner] view.addSubview(titleLab) titleLab.layoutChain .top(20) .left(20) view.addSubview(startTimeLab) startTimeLab.layoutChain .topToBottomOfView(titleLab, offset: 8) .leftToView(titleLab) let dotView = UIView() dotView.backgroundColor = UIColor(hexStr: "#16B3FF") dotView.cornerRadius = 3 view.addSubview(dotView) dotView.layoutChain .leftToRightOfView(startTimeLab, offset: 10) .centerY(startTimeLab) .width(6) .heightToWidth(1) view.addSubview(startAddressLab) startAddressLab.layoutChain .centerY(startTimeLab) .leftToRightOfView(dotView, offset: 12) view.addSubview(endTimeLab) endTimeLab.layoutChain .topToBottomOfView(startTimeLab, offset: 24) .leftToView(startTimeLab) return view }() /// xxx 的行程详细信息 lazy var titleLab: UILabel = { let label = UILabel() label.textColor = UIColor(hexStr: "#0F2846") label.font = .systemFont(ofSize: 16, weight: .semibold) return label }() lazy var startTimeLab: UILabel = { let label = UILabel() label.textColor = UIColor(hexStr: "#666666") label.font = .systemFont(ofSize: 16, weight: .medium) return label }() lazy var startAddressLab: UILabel = { let label = UILabel() label.textColor = UIColor(hexStr: "#999999") label.font = .systemFont(ofSize: 14, weight: .medium) return label }() lazy var endTimeLab: UILabel = { let label = UILabel() label.textColor = UIColor(hexStr: "#666666") label.font = .systemFont(ofSize: 16, weight: .medium) return label }() lazy var endAddressLab: UILabel = { let label = UILabel() label.textColor = UIColor(hexStr: "#999999") label.font = .systemFont(ofSize: 14, weight: .medium) return label }() override init(frame: CGRect) { super.init(frame: frame) backgroundColor = .clear setupUI() setupRx() } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } }