227 lines
6.8 KiB
Swift
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)
|
|
}
|
|
}
|
|
|
|
}
|