MoviaBox/MoviaBox/Class/Mine/View/SPMineHeaderView.swift
2025-05-12 14:20:00 +08:00

227 lines
6.8 KiB
Swift

//
// SPMineHeaderView.swift
// MoviaBox
//
// Created by Overseas on 2025/4/19.
//
import UIKit
class SPMineHeaderView: UIView {
var contentHeight: CGFloat {
var height: CGFloat = kSPStatusbarHeight + 100
var stackHeight = 0.0
stackHeight += memberView.intrinsicContentSize.height
stackHeight += self.stackView.spacing
stackHeight += walletView.intrinsicContentSize.height
if playHistoryArr?.count ?? 0 > 0 {
stackHeight += self.stackView.spacing
stackHeight += playHistoryView.contentHeight
}
if stackHeight > 0 {
height += stackHeight
height += 10
}
return height
}
var userInfo: SPUserInfo? {
didSet {
avatarImageView.sp_setImage(url: userInfo?.avator, placeholder: UIImage(named: "avatar_image_01"))
if let name = userInfo?.family_name, name.count > 0 {
nicknameLabel.text = name
} else {
nicknameLabel.text = "Vistor"
}
idLabel.text = "ID \(userInfo?.customer_id ?? "")"
loginButton.isHidden = !(userInfo?.is_tourist ?? true)
memberView.userInfo = self.userInfo
walletView.userInfo = self.userInfo
}
}
var playHistoryArr: [SPShortModel]? {
didSet {
updateStackViewLayout()
playHistoryView.dataArr = playHistoryArr
}
}
//MARK: UI
private lazy var avatarImageView: SPImageView = {
let imageView = SPImageView(image: UIImage(named: "avatar_image_01"))
imageView.layer.cornerRadius = 31
imageView.layer.masksToBounds = true
imageView.layer.borderColor = UIColor.colorFFFFFF(alpha: 0.3).cgColor
imageView.layer.borderWidth = 2
return imageView
}()
private lazy var nicknameLabel: UILabel = {
let label = UILabel()
label.font = .fontMedium(ofSize: 16)
label.textColor = .colorFFFFFF()
return label
}()
private lazy var idLabel: UILabel = {
let label = UILabel()
label.font = .fontRegular(ofSize: 14)
label.textColor = .color8B6C6C()
return label
}()
private lazy var copyButton: UIButton = {
let button = UIButton(type: .custom)
button.setTitle("movia_copy".localized, for: .normal)
button.setTitleColor(.colorFFFFFF(), for: .normal)
button.titleLabel?.font = .fontRegular(ofSize: 12)
button.setBackgroundImage(UIImage(color: .color58484B(alpha: 0.56)), for: .normal)
button.layer.cornerRadius = 2
button.layer.masksToBounds = true
button.addTarget(self, action: #selector(handleCopyButton), for: .touchUpInside)
return button
}()
private lazy var stackView: UIStackView = {
let view = UIStackView()
view.axis = .vertical
view.spacing = 12
return view
}()
///
private lazy var memberView: SPMineMemberView = {
let view = SPMineMemberView()
return view
}()
///
private lazy var walletView: SPMineWalletView = {
let view = SPMineWalletView()
return view
}()
///
private lazy var playHistoryView: SPMinePlayHistoryView = {
let view = SPMinePlayHistoryView()
return view
}()
private lazy var loginButton: UIButton = {
let button = UIButton(type: .custom)
button.setTitle("movia_profile_Log_in".localized, for: .normal)
button.setTitleColor(.colorFFFFFF(), for: .normal)
button.titleLabel?.font = .fontMedium(ofSize: 16)
button.setBackgroundImage(UIImage(color: .colorFFFFFF(alpha: 0.23)), for: .normal)
button.layer.cornerRadius = 15
button.layer.masksToBounds = true
button.layer.borderWidth = 1
button.layer.borderColor = UIColor.colorFFFFFF().cgColor
button.addTarget(self, action: #selector(handleLoginButton), for: .touchUpInside)
return button
}()
override init(frame: CGRect) {
super.init(frame: frame)
updateStackViewLayout()
_setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func updateStackViewLayout() {
stackView.removeAllArrangedSubview()
stackView.addArrangedSubview(memberView)
stackView.addArrangedSubview(walletView)
if let arr = playHistoryArr, arr.count > 0 {
stackView.addArrangedSubview(playHistoryView)
}
}
}
extension SPMineHeaderView {
@objc private func handleCopyButton() {
SPAPPTool.copy(text: userInfo?.customer_id)
}
@objc private func handleLoginButton() {
SPLoginManager.manager.openLoginVC()
}
}
extension SPMineHeaderView {
private func _setupUI() {
addSubview(avatarImageView)
addSubview(nicknameLabel)
addSubview(idLabel)
addSubview(copyButton)
addSubview(loginButton)
addSubview(stackView)
avatarImageView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(16)
make.top.equalToSuperview().offset(kSPStatusbarHeight + 22)
make.width.height.equalTo(62)
}
nicknameLabel.snp.makeConstraints { make in
make.left.equalTo(avatarImageView.snp.right).offset(15)
make.top.equalTo(avatarImageView).offset(9)
}
idLabel.snp.makeConstraints { make in
make.left.equalTo(nicknameLabel)
make.top.equalTo(nicknameLabel.snp.bottom).offset(6)
}
let copyWidth = (copyButton.currentTitle?.size(font: copyButton.titleLabel?.font ?? .fontRegular(ofSize: 12)).width ?? 0) + 8
copyButton.snp.makeConstraints { make in
make.centerY.equalTo(idLabel)
make.left.equalTo(idLabel.snp.right).offset(6)
make.height.equalTo(18)
make.width.equalTo(copyWidth)
}
let loginWidth = (loginButton.currentTitle?.size(font: loginButton.titleLabel?.font ?? .fontRegular(ofSize: 12)).width ?? 0) + 28
loginButton.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-16)
make.height.equalTo(30)
make.width.equalTo(loginWidth)
make.centerY.equalTo(avatarImageView)
}
stackView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalToSuperview().offset(kSPStatusbarHeight + 100)
}
}
}