// // SPPlayBuyView.swift // MoviaBox // // Created by 佳尔 on 2025/4/28. // import UIKit class SPPlayBuyView: HWPanModalContentView { var buyFinishBlock: (() -> Void)? var shortPlayId: String? { didSet { rechargeView.shortPlayId = shortPlayId memberView.shortPlayId = shortPlayId } } var videoId: String? { didSet { rechargeView.videoId = videoId memberView.videoId = videoId } } //MARK: UI属性 private lazy var bgView: UIImageView = { let view = UIImageView(image: UIImage(named: "buy_bg_image_01")) return view }() private lazy var indicatorView: UIView = { let view = UIView() view.backgroundColor = .colorFFFFFF(alpha: 0.4) view.layer.cornerRadius = 2.5 view.layer.masksToBounds = true return view }() private lazy var titleLabel: UILabel = { let label = UILabel() label.font = .fontMedium(ofSize: 16) label.textColor = .colorFFFFFF() label.text = "movia_Store".localized return label }() private lazy var restoreButton: UIButton = { let button = UIButton(type: .custom) button.setTitle("movia_Restore".localized, for: .normal) button.setTitleColor(.colorFFFFFF(alpha: 0.5), for: .normal) button.titleLabel?.font = .fontRegular(ofSize: 14) button.addTarget(self, action: #selector(handleRestoreButton), for: .touchUpInside) return button }() private lazy var scrollView: UIScrollView = { let scrollView = UIScrollView() return scrollView }() private lazy var stackView: UIStackView = { let view = UIStackView() view.axis = .vertical view.spacing = 16 return view }() private lazy var rechargeView: SPCoinRechargeView = { let view = SPCoinRechargeView() view.userInfo = SPLoginManager.manager.userInfo view.rechargeFinishHandle = { [weak self] in self?.handleBuyFinish() } return view }() private lazy var memberView: SPMemberRechargeView = { let view = SPMemberRechargeView() view.buyFinishHandle = { [weak self] in self?.handleBuyFinish() } return view }() override init(frame: CGRect) { super.init(frame: frame) _setupUI() requestPayTemplate() } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } //MARK: HWPanModalPresentable override func panScrollable() -> UIScrollView? { return scrollView } override func longFormHeight() -> PanModalHeight { return PanModalHeightMake(.content, kSPScreenHeight * (3 / 4)) } override func showDragIndicator() -> Bool { return false } override func backgroundConfig() -> HWBackgroundConfig { let config = HWBackgroundConfig() config.backgroundAlpha = 0.6 return config } } extension SPPlayBuyView { ///购买成功 private func handleBuyFinish() { SPLoginManager.manager.updateUserInfo { [weak self] in guard let self = self else { return } self.rechargeView.userInfo = SPLoginManager.manager.userInfo } self.buyFinishBlock?() self.dismiss(animated: true) { } } @objc private func handleRestoreButton() { SPIAPManager.manager.restore { [weak self] isFinish in guard let self = self else { return } self.handleBuyFinish() } } } extension SPPlayBuyView { private func _setupUI() { addSubview(bgView) addSubview(indicatorView) addSubview(titleLabel) addSubview(restoreButton) addSubview(scrollView) scrollView.addSubview(stackView) bgView.snp.makeConstraints { make in make.left.right.top.equalToSuperview() } indicatorView.snp.makeConstraints { make in make.centerX.equalToSuperview() make.top.equalToSuperview().offset(8) make.width.equalTo(40) make.height.equalTo(5) } titleLabel.snp.makeConstraints { make in make.left.equalToSuperview().offset(16) make.top.equalToSuperview().offset(30) } restoreButton.snp.makeConstraints { make in make.centerY.equalTo(titleLabel) make.right.equalToSuperview().offset(-16) } scrollView.snp.makeConstraints { make in make.top.equalToSuperview().offset(76) make.left.right.equalToSuperview() make.bottom.equalToSuperview() } stackView.snp.makeConstraints { make in make.left.right.top.equalToSuperview() make.bottom.equalTo(-(kSPTabbarSafeBottomMargin + 10)) make.width.equalTo(kSPScreenWidth) } } } extension SPPlayBuyView { ///请求支付模版 private func requestPayTemplate() { SPWalletAPI.requestPayTemplate { [weak self] templateModel in guard let self = self else { return } self.rechargeView.dataArr = templateModel?.list_coins self.memberView.setDataArr(dataArr: templateModel?.list_sub_vip) self.stackView.removeAllArrangedSubview() self.stackView.addArrangedSubview(self.rechargeView) self.stackView.addArrangedSubview(self.memberView) self.panModalSetNeedsLayoutUpdate() } } }