// // SPPlayLockView.swift // MoviaBox // // Created by 佳尔 on 2025/5/6. // import UIKit class SPPlayLockView: UIView { ///是否是解锁上一集 var isUnlockUpEpisode: Bool = false { didSet { updateUnlockButton() } } var videoInfo: SPVideoInfoModel? { didSet { coinView.setTitle("\(videoInfo?.coins ?? 0)", for: .normal) } } ///点击解锁按钮 var clickUnlockButton: (() -> Void)? //MARK: UI属性 private lazy var containerView: UIView = { let view = UIView() return view }() private lazy var lockImageView: UIImageView = { let imageView = UIImageView(image: UIImage(named: "lock_icon_02")) return imageView }() private lazy var lockTextLabel: UILabel = { let label = UILabel() label.font = .fontRegular(ofSize: 18) label.textColor = .colorFFFFFF() label.text = "movia_video_lock_tip".localized return label }() private lazy var unlockButton: UIButton = { let button = UIButton() button.backgroundColor = .colorFF3232() button.layer.cornerRadius = 27 button.layer.masksToBounds = true button.addTarget(self, action: #selector(handleUnlockButton), for: .touchUpInside) return button }() private lazy var unlockStackView: UIStackView = { let view = UIStackView() view.isUserInteractionEnabled = false view.axis = .horizontal view.spacing = 6 view.alignment = .center return view }() private lazy var unlockImageView: UIImageView = { let imageView = UIImageView(image: UIImage(named: "unlock_icon_01")) return imageView }() private lazy var unlockTitleLabel: UILabel = { let label = UILabel() label.font = .fontRegular(ofSize: 16) label.textColor = .colorFFFFFF() return label }() private lazy var coinView: UIButton = { let view = JXButton(type: .custom) view.isUserInteractionEnabled = false view.backgroundColor = .color000000(alpha: 0.2) view.layer.cornerRadius = 19 view.layer.masksToBounds = true view.jx_font = .fontRegular(ofSize: 16) view.setTitleColor(.colorFFFFFF(), for: .normal) view.setImage(UIImage(named: "coin_icon_04"), for: .normal) view.space = 8 view.leftAndRightMargin = 8 view.snp.makeConstraints { make in make.height.equalTo(38) } return view }() override init(frame: CGRect) { super.init(frame: frame) backgroundColor = .color000000(alpha: 0.75) updateUnlockButton() _setupUI() } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } @objc private func handleUnlockButton() { if isUnlockUpEpisode { SPToast.show(text: "movia_jump_unlock_error".localized) return } self.clickUnlockButton?() } private func updateUnlockButton() { unlockStackView.removeAllArrangedSubview() unlockStackView.addArrangedSubview(unlockImageView) unlockStackView.addArrangedSubview(unlockTitleLabel) if isUnlockUpEpisode { unlockTitleLabel.text = "movia_video_lock_tip_02".localized } else { unlockTitleLabel.text = "movia_unlock_now_for".localized unlockStackView.addArrangedSubview(coinView) } } } extension SPPlayLockView { private func _setupUI() { addSubview(containerView) containerView.addSubview(lockImageView) containerView.addSubview(lockTextLabel) containerView.addSubview(unlockButton) unlockButton.addSubview(unlockStackView) containerView.snp.makeConstraints { make in make.centerY.equalToSuperview() make.left.right.equalToSuperview() } lockImageView.snp.makeConstraints { make in make.centerX.equalToSuperview() make.top.equalToSuperview() } lockTextLabel.snp.makeConstraints { make in make.centerX.equalToSuperview() make.top.equalTo(lockImageView.snp.bottom).offset(13) } unlockButton.snp.makeConstraints { make in make.centerX.equalToSuperview() make.left.equalToSuperview().offset(22) make.bottom.equalToSuperview() make.top.equalTo(lockTextLabel.snp.bottom).offset(35) make.height.equalTo(54) } unlockStackView.snp.makeConstraints { make in make.top.bottom.equalToSuperview() make.centerX.equalToSuperview() } } }