// // SPMemberRechargeCell.swift // MoviaBox // // Created by 佳尔 on 2025/4/28. // import UIKit class SPMemberRechargeCell: SPCollectionViewCell { var model: SPPayTemplateItem? { didSet { desLabel.text = model?.sp_description // typeLabel.text = model?.vip_type_key?.getText() typeLabel.text = model?.vip_type_key?.getTextV2() durationLabel.text = "/\(model?.vip_type_key?.getText() ?? "")" moneyLabel.text = "\(model?.currency ?? "")\(model?.price ?? "")" if let sendCoins = model?.send_coins, sendCoins > 0 { markBgView.isHidden = false tipLabel.isHidden = false sendCoinLabel.text = String(format: "movia_extra_#".localized, "\(sendCoins)") tipLabel.text = "·" + "movia_coins_extra_days".localizedReplace(text: "\(model?.send_coin_ttl ?? 0)") } else { markBgView.isHidden = true tipLabel.isHidden = true } switch model?.vip_type_key { case .year: bgView.image = UIImage(named: "vip_bg_image_01") vipImageView.image = UIImage(named: "vip_image_01") iconImageView.image = UIImage(named: "vip_icon_10") typeIconImageView.image = UIImage(named: "vip_icon_05") desLabel.textColor = .color6B3308() typeLabel.textColor = .colorFED095() moneyLabel.textColor = .colorFFE49E() tipLabel.textColor = .colorFFFFFF(alpha: 0.8) case .quarter: bgView.image = UIImage(named: "vip_bg_image_02") vipImageView.image = UIImage(named: "vip_image_02") iconImageView.image = UIImage(named: "vip_icon_03") typeIconImageView.image = UIImage(named: "vip_icon_06") desLabel.textColor = .color6B3308() typeLabel.textColor = .color9F5300() moneyLabel.textColor = typeLabel.textColor tipLabel.textColor = typeLabel.textColor case .month: bgView.image = UIImage(named: "vip_bg_image_03") vipImageView.image = UIImage(named: "vip_image_03") iconImageView.image = UIImage(named: "vip_icon_04") typeIconImageView.image = UIImage(named: "vip_icon_07") desLabel.textColor = .colorFFFFFF() typeLabel.textColor = .color0D4E64() moneyLabel.textColor = typeLabel.textColor tipLabel.textColor = typeLabel.textColor case .week: bgView.image = UIImage(named: "vip_bg_image_04") vipImageView.image = UIImage(named: "vip_image_04") iconImageView.image = UIImage(named: "vip_icon_04") typeIconImageView.image = UIImage(named: "vip_icon_08") desLabel.textColor = .colorFFFFFF() typeLabel.textColor = .color005786() moneyLabel.textColor = typeLabel.textColor tipLabel.textColor = .color020926() default: break } typeVipLabel.textColor = typeLabel.textColor durationLabel.textColor = moneyLabel.textColor updateLayout() } } //MARK: UI属性 private lazy var bgView: UIImageView = { let imageView = UIImageView() return imageView }() private lazy var vipImageView: UIImageView = { let imageView = UIImageView() return imageView }() private lazy var iconImageView: UIImageView = { let imageView = UIImageView() return imageView }() private lazy var desLabel: UILabel = { let label = UILabel() label.font = .fontRegular(ofSize: 12) return label }() private lazy var typeLabel: UILabel = { let label = UILabel() label.font = .fontMedium(ofSize: 16) return label }() private lazy var typeVipLabel: UILabel = { let string = NSMutableAttributedString(string: "VIP") string.font = .fontBold(ofSize: 13).withBoldItalic() let label = UILabel() label.attributedText = string return label }() private lazy var typeIconImageView: UIImageView = { let imageView = UIImageView() imageView.isHidden = true return imageView }() private lazy var moneyLabel: UILabel = { let label = UILabel() label.font = .fontBold(ofSize: 32) return label }() private lazy var durationLabel: UILabel = { let label = UILabel() return label }() private lazy var tipLabel: UILabel = { let label = UILabel() label.font = .fontRegular(ofSize: 10) label.text = "movia_buy_menber_tip".localized return label }() private lazy var markBgView: SPGradientView = { let view = SPGradientView() view.colors = [UIColor.colorFF1A35().cgColor, UIColor.colorFF569C().cgColor, UIColor.colorFF8E33().cgColor] view.locations = [0, 0.5, 1] view.startPoint = .init(x: 0, y: 0.5) view.endPoint = .init(x: 1, y: 0.5) view.addRadius(topLeft: 0, topRight: 8, bottomLeft: 11, bottomRight: 0) return view }() private lazy var sendCoinLabel: UILabel = { let label = UILabel() label.font = .fontBold(ofSize: 11) label.textColor = .colorFFFFFF() return label }() private lazy var coinImageView: UIImageView = { let imageView = UIImageView(image: UIImage(named: "coin_icon_05")) return imageView }() override init(frame: CGRect) { super.init(frame: frame) _setupUI() } @MainActor required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } private func updateLayout() { if model?.vip_type_key == .year { desLabel.font = .fontRegular(ofSize: 12) typeLabel.font = .fontMedium(ofSize: 16) durationLabel.font = .fontRegular(ofSize: 14) vipImageView.snp.updateConstraints { make in make.right.equalToSuperview().offset(0) } typeLabel.snp.updateConstraints { make in make.top.equalToSuperview().offset(12) } moneyLabel.snp.updateConstraints { make in make.top.equalToSuperview().offset(39) } tipLabel.snp.updateConstraints { make in make.top.equalTo(moneyLabel.snp.bottom).offset(6) } } else { desLabel.font = .fontRegular(ofSize: 10) typeLabel.font = .fontMedium(ofSize: 12) durationLabel.font = .fontRegular(ofSize: 12) vipImageView.snp.updateConstraints { make in make.right.equalToSuperview().offset(-11) } typeLabel.snp.updateConstraints { make in make.top.equalToSuperview().offset(8) } moneyLabel.snp.updateConstraints { make in make.top.equalToSuperview().offset(26) } tipLabel.snp.updateConstraints { make in make.top.equalTo(moneyLabel.snp.bottom).offset(0) } } } } extension SPMemberRechargeCell { private func _setupUI() { contentView.addSubview(bgView) bgView.addSubview(iconImageView) bgView.addSubview(desLabel) bgView.addSubview(vipImageView) bgView.addSubview(typeLabel) bgView.addSubview(typeVipLabel) bgView.addSubview(typeIconImageView) bgView.addSubview(moneyLabel) bgView.addSubview(durationLabel) bgView.addSubview(tipLabel) bgView.addSubview(markBgView) markBgView.addSubview(sendCoinLabel) markBgView.addSubview(coinImageView) bgView.snp.makeConstraints { make in make.edges.equalToSuperview() } vipImageView.snp.makeConstraints { make in make.top.equalToSuperview().offset(15) make.right.equalToSuperview().offset(-11) } iconImageView.snp.makeConstraints { make in make.left.equalToSuperview().offset(16) make.bottom.equalToSuperview().offset(-7) } desLabel.snp.makeConstraints { make in make.centerY.equalTo(iconImageView) make.left.equalTo(iconImageView.snp.right).offset(4) } typeLabel.snp.makeConstraints { make in make.left.equalToSuperview().offset(16) make.top.equalToSuperview().offset(8) } typeVipLabel.snp.makeConstraints { make in make.centerY.equalTo(typeLabel) make.left.equalTo(typeLabel.snp.right).offset(2) } typeIconImageView.snp.makeConstraints { make in make.centerY.equalTo(typeLabel) make.left.equalTo(typeLabel.snp.right).offset(3) } moneyLabel.snp.makeConstraints { make in make.left.equalTo(typeLabel) make.top.equalToSuperview().offset(28) } durationLabel.snp.makeConstraints { make in make.left.equalTo(moneyLabel.snp.right) make.centerY.equalTo(moneyLabel) } tipLabel.snp.makeConstraints { make in make.left.equalTo(typeLabel) make.top.equalTo(moneyLabel.snp.bottom).offset(4) } markBgView.snp.makeConstraints { make in make.top.equalToSuperview().offset(1) make.right.equalToSuperview().offset(-1) make.height.equalTo(18) } sendCoinLabel.snp.makeConstraints { make in make.centerY.equalToSuperview() make.left.equalToSuperview().offset(5) } coinImageView.snp.makeConstraints { make in make.centerY.equalToSuperview() make.left.equalTo(sendCoinLabel.snp.right).offset(2) make.right.equalToSuperview().offset(-5) } } }