// // 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)) } }