ThimraTV/MoviaBox/Class/Player/View/SPPlayBuyView.swift
2025-06-18 19:26:21 +08:00

273 lines
7.8 KiB
Swift

//
// 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 closeButton: UIButton = {
let button = UIButton(type: .custom)
button.setImage(UIImage(named: "close_icon_04"), for: .normal)
button.addTarget(self, action: #selector(handleCloseButton), for: .touchUpInside)
return button
}()
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
}()
private lazy var tipTitleLabel: UILabel = {
let label = UILabel()
label.font = .fontMedium(ofSize: 12)
label.textColor = .colorFFFFFF(alpha: 0.7)
return label
}()
private lazy var tipTextLabel: UILabel = {
let label = UILabel()
label.numberOfLines = 0
label.textColor = .colorFFFFFF(alpha: 0.5)
label.font = .fontRegular(ofSize: 12)
return label
}()
override init(frame: CGRect) {
super.init(frame: frame)
tipTitleLabel.text = "movia_store_tips_title_ios".localized
tipTextLabel.text = "movia_store_tips_ios".localized.replacingOccurrences(of: "\\n", with: "\n")
_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 - kSPNavBarHeight - 10)
}
override func showDragIndicator() -> Bool {
return false
}
override func backgroundConfig() -> HWBackgroundConfig {
let config = HWBackgroundConfig()
config.backgroundAlpha = 0.6
return config
}
override func allowsDragToDismiss() -> Bool {
return false
}
override func allowsTapBackgroundToDismiss() -> Bool {
return false
}
override func allowsPullDownWhenShortState() -> Bool {
return false
}
override func minVerticalVelocityToTriggerDismiss() -> CGFloat {
return 0
}
override func showsScrollableVerticalScrollIndicator() -> Bool {
return false
}
}
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()
}
}
@objc private func handleCloseButton() {
self.dismiss(animated: true) {
}
}
}
extension SPPlayBuyView {
private func _setupUI() {
addSubview(bgView)
addSubview(closeButton)
addSubview(titleLabel)
// addSubview(restoreButton)
addSubview(scrollView)
scrollView.addSubview(stackView)
scrollView.addSubview(tipTitleLabel)
scrollView.addSubview(tipTextLabel)
bgView.snp.makeConstraints { make in
make.left.right.top.equalToSuperview()
}
closeButton.snp.makeConstraints { make in
make.top.equalToSuperview().offset(7)
make.right.equalToSuperview().offset(-12)
make.width.height.equalTo(32)
}
titleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(16)
make.centerY.equalTo(closeButton)
}
// restoreButton.snp.makeConstraints { make in
// make.centerY.equalTo(titleLabel)
// make.right.equalToSuperview().offset(-16)
// }
scrollView.snp.makeConstraints { make in
make.top.equalToSuperview().offset(58)
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)
}
tipTitleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(24)
make.top.equalTo(stackView.snp.bottom).offset(34)
}
tipTextLabel.snp.makeConstraints { make in
make.left.equalTo(tipTitleLabel)
make.right.lessThanOrEqualTo(stackView).offset(-24)
make.top.equalTo(tipTitleLabel.snp.bottom).offset(4)
make.bottom.equalTo(-(kSPTabbarSafeBottomMargin + 10))
}
}
}
extension SPPlayBuyView {
///
private func requestPayTemplate() {
SPWalletAPI.requestPayTemplate { [weak self] templateModel in
guard let self = self else { return }
self.stackView.removeAllArrangedSubview()
if let list = templateModel?.list_sub_vip, list.count > 0 {
self.memberView.setDataArr(dataArr: templateModel?.list_sub_vip)
self.stackView.addArrangedSubview(self.memberView)
}
if let list = templateModel?.list_coins, list.count > 0 {
self.rechargeView.dataArr = templateModel?.list_coins
self.stackView.addArrangedSubview(self.rechargeView)
}
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
self.panModalSetNeedsLayoutUpdate()
}
}
}
}