jsdw_ios/QuickLocation/Section/Home/HomeView.swift

356 lines
9.1 KiB
Swift

//
// HomeView.swift
// QuickLocation
//
// Created by on 2026/5/27.
//
import UIKit
import RxSwift
import RxCocoa
#if !targetEnvironment(simulator)
import MAMapKit
#endif
class HomeView: UIView {
var disposeBag = DisposeBag()
// MARK: - Map
#if !targetEnvironment(simulator)
lazy var mapView: MAMapView = {
let mv = MAMapView()
mv.zoomLevel = 15
mv.minZoomLevel = 3
mv.maxZoomLevel = 20
mv.showsUserLocation = true
mv.userTrackingMode = .follow
mv.showsCompass = false
mv.showsScale = false
mv.isRotateEnabled = false
mv.isRotateCameraEnabled = false
return mv
}()
#else
lazy var mapPlaceholderView: UIView = {
let v = UIView()
v.backgroundColor = UIColor(hexStr: "#EDEDED")
let label = UILabel()
label.text = "Map requires a real device"
label.font = UIFont.systemFont(ofSize: 14)
label.textColor = UIColor(hexStr: "#999999")
label.textAlignment = .center
v.addSubview(label)
label.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
label.centerXAnchor.constraint(equalTo: v.centerXAnchor),
label.centerYAnchor.constraint(equalTo: v.centerYAnchor)
])
return v
}()
#endif
// MARK: - Setup
private func setupRx() {
}
private func setupUI() {
#if !targetEnvironment(simulator)
addSubview(mapView)
#else
addSubview(mapPlaceholderView)
#endif
addSubview(navBarBg)
addSubview(avatarImgView)
addSubview(groupView)
groupView.addSubview(groupIconView)
groupView.addSubview(groupNameLab)
groupView.addSubview(groupArrowIconView)
addSubview(toolsView)
addSubview(locationView)
locationView.addSubview(locationIconView)
#if !targetEnvironment(simulator)
mapView.layoutChain
.top()
.edges(excludingEdge: .top)
sendSubviewToBack(mapView)
#else
mapPlaceholderView.layoutChain
.topToBottomOfView(navBarBg)
.left(0).right(0).bottom(0)
#endif
navBarBg.layoutChain
.edges(excludingEdge: .bottom)
.heightToWidth(160/375)
avatarImgView.layoutChain
.top(59)
.left(15)
.width(36)
.heightToWidth(1)
groupView.layoutChain
.centerY(avatarImgView)
.height(36)
.centerX()
.width(185, relation: .greaterThanOrEqual)
groupIconView.layoutChain
.left(11)
.centerY()
.width(30)
.height(30)
groupArrowIconView.layoutChain
.right(15)
.centerY()
.width(15)
.height(8.5)
groupNameLab.layoutChain
.edgesVertical()
.leftToRightOfView(groupIconView)
.rightToLeftOfView(groupArrowIconView)
toolsView.layoutChain
.left(23)
.centerY()
.width(40)
bubbleView.layoutChain
.top(12)
.height(58)
bubbleIcon.layoutChain
.top()
.centerX()
.width(28)
.height(28)
bubbleLab.layoutChain
.topToBottomOfView(bubbleIcon, offset: 4)
.edgesHorzontal()
signInView.layoutChain.height(58)
signInIcon.layoutChain
.top()
.centerX()
.width(28)
.height(28)
signInLab.layoutChain
.topToBottomOfView(signInIcon, offset: 4)
.edgesHorzontal()
sosView.layoutChain
.height(56)
sosIcon.layoutChain
.top()
.centerX()
.width(28)
.height(28)
sosLab.layoutChain
.topToBottomOfView(sosIcon, offset: 4)
.edgesHorzontal()
locationView.layoutChain
.right(15)
.bottomToView(toolsView)
.width(40)
.height(40)
locationIconView.layoutChain
.centerX()
.centerY()
}
override init(frame: CGRect) {
super.init(frame: .zero)
backgroundColor = .white
setupUI()
setupRx()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: - UI Components
lazy var navBarBg: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "Home/navBar_bg")
view.contentMode = .scaleAspectFill
return view
}()
lazy var avatarImgView: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "map_avatar_1")
view.backgroundColor = .clear
view.contentMode = .scaleAspectFill
view.cornerRadius = 18
return view
}()
lazy var groupView: UIView = {
let view = UIView()
view.backgroundColor = .white
view.cornerRadius = 18
return view
}()
lazy var groupIconView: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "Home/group")
view.backgroundColor = .clear
view.contentMode = .scaleAspectFill
return view
}()
lazy var groupNameLab: UILabel = {
let label = UILabel()
label.text = "我的圈子"
label.font = .systemFont(ofSize: 16, weight: .medium)
label.textColor = UIColor(hexStr: "#0F2846")
label.textAlignment = .center
return label
}()
lazy var groupArrowIconView: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "Home/arrow_down")
view.backgroundColor = .clear
view.contentMode = .scaleAspectFill
return view
}()
// MARK: -
lazy var toolsView: UIStackView = {
let view = UIStackView(arrangedSubviews: [bubbleView, signInView, sosView])
view.axis = .vertical
view.alignment = .center
view.spacing = 0
view.backgroundColor = .black.withAlphaComponent(0.5)
view.cornerRadius = 20
return view
}()
//
lazy var bubbleView: UIView = {
let view = UIView()
view.backgroundColor = .clear
view.addSubview(bubbleIcon)
view.addSubview(bubbleLab)
let lineView = UIView()
lineView.backgroundColor = .white
view.addSubview(lineView)
lineView.layoutChain
.width(12)
.height(2)
.centerX()
.bottom(7)
return view
}()
lazy var bubbleIcon: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "Home/bubble")
view.backgroundColor = .clear
view.contentMode = .scaleAspectFill
return view
}()
lazy var bubbleLab: UILabel = {
let label = UILabel()
label.text = "气泡"
label.font = .systemFont(ofSize: 10, weight: .medium)
label.textColor = .white
label.textAlignment = .center
return label
}()
//
lazy var signInView: UIView = {
let view = UIView()
view.backgroundColor = .clear
view.addSubview(signInIcon)
view.addSubview(signInLab)
let lineView = UIView()
lineView.backgroundColor = .white
view.addSubview(lineView)
lineView.layoutChain
.width(12)
.height(2)
.centerX()
.bottom(7)
return view
}()
lazy var signInIcon: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "Home/signIn")
view.backgroundColor = .clear
view.contentMode = .scaleAspectFill
return view
}()
lazy var signInLab: UILabel = {
let label = UILabel()
label.text = "签到"
label.font = .systemFont(ofSize: 10, weight: .medium)
label.textColor = .white
label.textAlignment = .center
return label
}()
// SOS
lazy var sosView: UIView = {
let view = UIView()
view.backgroundColor = .clear
view.addSubview(sosIcon)
view.addSubview(sosLab)
return view
}()
lazy var sosIcon: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "Home/sos")
view.backgroundColor = .clear
view.contentMode = .scaleAspectFill
return view
}()
lazy var sosLab: UILabel = {
let label = UILabel()
label.text = "SOS"
label.font = .systemFont(ofSize: 10, weight: .medium)
label.textColor = .white
label.textAlignment = .center
return label
}()
// MARK: -
lazy var locationView: UIView = {
let view = UIView()
view.backgroundColor = .black.withAlphaComponent(0.4)
view.cornerRadius = 20
return view
}()
lazy var locationIconView: UIImageView = {
let view = UIImageView()
view.backgroundColor = .clear
view.image = UIImage(named: "Home/location")
return view
}()
}