jsdw_ios/QuickLocation/Section/Home/InteractionView.swift

215 lines
6.0 KiB
Swift

//
// InteractionView.swift
// QuickLocation
//
// Created by on 2026/6/15.
//
import UIKit
class InteractionView: UIView {
func configure(member: CircleMember) {
avaterImgView.image = UIImage(named: "UserIcon/\(member.avatar)")
nameLab.text = member.name
locationLab.text = member.address
//
let batteryInt = Int(member.battery) ?? 0
let batteryPercent = min(CGFloat(batteryInt), 100)
batteryView.layoutChain.width(CGFloat(16 - 1) * batteryPercent / 100.0)
batteryLab.text = "\(member.battery)%"
}
private func setupRx() {
}
private func setupUI() {
addSubview(infoView)
infoView.addSubview(headerBgView)
infoView.addSubview(lineView)
infoView.addSubview(avaterImgView)
infoView.addSubview(batteryInfoView)
batteryInfoView.addSubview(cornerView)
cornerView.addSubview(batteryView)
cornerView.addSubview(batteryIcon)
cornerView.addSubview(batteryLab)
infoView.addSubview(nameLab)
infoView.addSubview(locationLab)
infoView.addSubview(navigateBtn)
infoView.addSubview(shareBtn)
infoView.layoutChain.edges()
headerBgView.layoutChain
.edges(excludingEdge: .bottom)
.height(134)
lineView.layoutChain
.top(13)
.width(36)
.height(4)
.centerX()
avaterImgView.layoutChain
.top(25)
.left(25)
.width(50)
.height(50)
batteryInfoView.layoutChain
.leftToView(avaterImgView)
.rightToView(avaterImgView)
.bottomToView(avaterImgView)
.height(12)
cornerView.layoutChain.edges()
batteryIcon.layoutChain
.left(7)
.centerY()
.width(16)
.height(8)
batteryView.layoutChain
.topToView(batteryIcon)
.leftToView(batteryIcon, offset: -1)
.bottomToView(batteryIcon)
batteryLab.layoutChain
.leftToRightOfView(batteryIcon, offset: 4)
.right(5)
.centerY()
nameLab.layoutChain
.topToView(avaterImgView, offset: 8)
.leftToRightOfView(avaterImgView, offset: 15)
locationLab.layoutChain
.topToBottomOfView(nameLab)
.leftToView(nameLab)
shareBtn.layoutChain
.right(15)
.centerY(avaterImgView)
.width(30)
.height(30)
navigateBtn.layoutChain
.rightToLeftOfView(shareBtn, offset: -10)
.centerY(avaterImgView)
.width(30)
.height(30)
}
lazy var infoView: UIView = {
let view = UIView()
view.backgroundColor = .white
return view
}()
lazy var headerBgView: UIImageView = {
let view = UIImageView(image: UIImage(named: "Home/interaction_header"))
return view
}()
lazy var lineView: UIView = {
let view = UIView()
view.backgroundColor = .white
view.cornerRadius = 2
return view
}()
lazy var avaterImgView: UIImageView = {
let view = UIImageView()
view.backgroundColor = .lightGray
view.contentMode = .scaleAspectFill
view.cornerRadius = 25
return view
}()
lazy var batteryInfoView: UIView = {
let view = UIView()
view.backgroundColor = .clear
view.layer.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.1).cgColor
view.layer.shadowOffset = CGSize(width: 0, height: 2)
view.layer.shadowOpacity = 1
view.layer.shadowRadius = 6
return view
}()
lazy var cornerView: UIView = {
let view = UIView()
view.backgroundColor = .white
view.cornerRadius = 6
return view
}()
lazy var batteryView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hexStr: "#75E582")
return view
}()
lazy var batteryIcon: UIImageView = {
let view = UIImageView()
view.backgroundColor = .clear
view.image = UIImage(named: "Home/battery")
return view
}()
lazy var batteryLab: UILabel = {
let label = UILabel()
label.textColor = UIColor(hexStr: "#D4D4D4")
label.font = .systemFont(ofSize: 6, weight: .medium)
return label
}()
lazy var nameLab: UILabel = {
let label = UILabel()
label.textColor = UIColor(hexStr: "#0F2846")
label.font = .systemFont(ofSize: 14, weight: .semibold)
return label
}()
lazy var locationLab: UILabel = {
let label = UILabel()
label.textColor = UIColor(hexStr: "#8D8D8D")
label.font = .systemFont(ofSize: 10, weight: .regular)
return label
}()
lazy var navigateBtn: UIButton = {
let btn = UIButton(type: .custom)
btn.setImage(UIImage(named: "Home/navigate"), for: .normal)
btn.cornerRadius = 15
btn.extendEdgeInsets = UIEdgeInsets(top: 30, left: 30, bottom: 30, right: 0)
return btn
}()
lazy var shareBtn: UIButton = {
let btn = UIButton(type: .custom)
btn.setImage(UIImage(named: "Home/share"), for: .normal)
btn.cornerRadius = 15
btn.extendEdgeInsets = UIEdgeInsets(top: 30, left: 0, bottom: 30, right: 15)
return btn
}()
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = .clear
setupUI()
setupRx()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func layoutSubviews() {
super.layoutSubviews()
infoView.layoutIfNeeded()
infoView.setCornerRadius(corners: [.topLeft ,.topRight], withCornerRadii: CGSize(width: 20, height: 20))
}
}