321 lines
10 KiB
Swift
321 lines
10 KiB
Swift
//
|
|
// SRVideoRechargeView.swift
|
|
// SynthReel
|
|
//
|
|
// Created by CSGY on 2025/12/5.
|
|
// Copyright © 2025 SR. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
class SRVideoRechargeView: SRPanModalContentView {
|
|
|
|
var buyFinishHandle: (() -> Void)?
|
|
var didDismissHandle: (() -> Void)?
|
|
|
|
var model: SRPayDateModel? {
|
|
didSet {
|
|
self.stackView.sr_removeAllArrangedSubview()
|
|
self.vipView.dataArr = model?.list_sub_vip ?? []
|
|
self.coinsView.setDataArr(model?.list_coins ?? [])
|
|
|
|
if let sort = model?.sort, sort.count > 0 {
|
|
sort.forEach {
|
|
if $0 == .vip, model?.list_sub_vip?.isEmpty == false {
|
|
self.stackView.addArrangedSubview(self.vipView)
|
|
} else if $0 == .coin, model?.list_coins?.isEmpty == false {
|
|
self.stackView.addArrangedSubview(self.coinsView)
|
|
}
|
|
}
|
|
} else {
|
|
if model?.list_sub_vip?.isEmpty == false {
|
|
self.stackView.addArrangedSubview(self.vipView)
|
|
}
|
|
if model?.list_coins?.isEmpty == false {
|
|
self.stackView.addArrangedSubview(self.coinsView)
|
|
}
|
|
}
|
|
|
|
self.stackView.addArrangedSubview(self.tipView)
|
|
|
|
self.setNeedsLayoutUpdate()
|
|
}
|
|
}
|
|
|
|
var videoInfo: SRVideoInfoModel? {
|
|
didSet {
|
|
self.coinsView.videoId = videoInfo?.short_play_video_id
|
|
self.coinsView.shortPlayId = videoInfo?.short_play_id
|
|
self.vipView.videoId = videoInfo?.short_play_video_id
|
|
self.vipView.shortPlayId = videoInfo?.short_play_id
|
|
videoCoinsView.coins = videoInfo?.coins ?? 0
|
|
|
|
self.requestRestore()
|
|
}
|
|
}
|
|
|
|
private lazy var closeButton: UIButton = {
|
|
let button = UIButton(type: .custom, primaryAction: UIAction(handler: { [weak self] _ in
|
|
guard let self = self else { return }
|
|
// FAStatAPI.requestEventStat(orderCode: nil, shortPlayId: self.videoInfo?.short_play_id, videoId: self.videoInfo?.short_play_video_id, eventKey: .payTemplateDialog, errorMsg: nil, otherParamenters: [
|
|
// "event_name" : "pay cancel"
|
|
// ])
|
|
Task {
|
|
await self.dismiss(animated: true)
|
|
}
|
|
self.didDismissHandle?()
|
|
}))
|
|
button.setImage(UIImage(named: "Close"), for: .normal)
|
|
return button
|
|
}()
|
|
|
|
private lazy var scrollView: SRScrollView = {
|
|
let scrollView = SRScrollView()
|
|
// scrollView.clipsToBounds = false
|
|
return scrollView
|
|
}()
|
|
|
|
private lazy var stackView: UIStackView = {
|
|
let view = UIStackView()
|
|
view.axis = .vertical
|
|
view.spacing = 18
|
|
return view
|
|
}()
|
|
|
|
private lazy var coinsView: SRStoreCoinsView = {
|
|
let view = SRStoreCoinsView()
|
|
view.buyFinishHandle = { [weak self] in
|
|
self?.buyFinishHandle?()
|
|
Task {
|
|
await self?.dismiss(animated: true)
|
|
}
|
|
}
|
|
return view
|
|
}()
|
|
|
|
private lazy var vipView: SRStoreVipView = {
|
|
let view = SRStoreVipView()
|
|
view.buyFinishHandle = { [weak self] in
|
|
self?.buyFinishHandle?()
|
|
Task {
|
|
await self?.dismiss(animated: true)
|
|
}
|
|
}
|
|
return view
|
|
}()
|
|
|
|
private lazy var videoCoinsView: SRVideoRechargeView.CoinsView = {
|
|
let view = SRVideoRechargeView.CoinsView()
|
|
view.title = "synthreel_price".localized + ":"
|
|
return view
|
|
}()
|
|
|
|
private lazy var totalCoinsView: SRVideoRechargeView.CoinsView = {
|
|
let view = SRVideoRechargeView.CoinsView()
|
|
view.title = "synthreel_balance".localized + ":"
|
|
view.coins = SRLogin.manager.userInfo?.totalCoins ?? 0
|
|
return view
|
|
}()
|
|
|
|
private lazy var tipView: UIView = {
|
|
let view = UIView()
|
|
view.addSubview(tipTitleLabel)
|
|
view.addSubview(tipTextLabel)
|
|
|
|
tipTitleLabel.snp.makeConstraints { make in
|
|
make.top.equalToSuperview().offset(7)
|
|
make.left.equalToSuperview().offset(16)
|
|
}
|
|
|
|
tipTextLabel.snp.makeConstraints { make in
|
|
make.left.equalToSuperview().offset(16)
|
|
make.right.lessThanOrEqualToSuperview().offset(-16)
|
|
make.top.equalTo(tipTitleLabel.snp.bottom).offset(4)
|
|
make.bottom.equalToSuperview()
|
|
}
|
|
return view
|
|
}()
|
|
|
|
private lazy var tipTitleLabel: UILabel = {
|
|
let label = UILabel()
|
|
label.font = .font(ofSize: 12, weight: .medium)
|
|
label.textColor = .white
|
|
label.text = "synthreel_tips".localized
|
|
return label
|
|
}()
|
|
|
|
private lazy var tipTextLabel: UILabel = {
|
|
let label = UILabel()
|
|
label.font = .font(ofSize: 10, weight: .regular)
|
|
label.textColor = .white
|
|
label.text = "store_tips".localized
|
|
label.numberOfLines = 0
|
|
return label
|
|
}()
|
|
|
|
deinit {
|
|
NotificationCenter.default.removeObserver(self)
|
|
}
|
|
|
|
override init(frame: CGRect) {
|
|
super.init(frame: frame)
|
|
NotificationCenter.default.addObserver(self, selector: #selector(userInfoUpdateNotification), name: SRLogin.userInfoUpdateNotification, object: nil)
|
|
self.contentHeight = UIScreen.height - UIScreen.safeTop
|
|
// self.backgroundColor = ._000000.withAlphaComponent(0.6)
|
|
self.backgroundColor = .clear
|
|
self.mainScrollView = self.scrollView
|
|
fa_setupLayout()
|
|
}
|
|
|
|
@MainActor required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
@objc private func userInfoUpdateNotification() {
|
|
totalCoinsView.coins = SRLogin.manager.userInfo?.totalCoins ?? 0
|
|
}
|
|
|
|
override func present(in view: UIView?) {
|
|
super.present(in: view)
|
|
// self.hw_contentView.sr_addEffectView(style: .dark)
|
|
// self.hw_contentView.sr_setRoundedCorner(topLeft: 24, topRight: 24, bottomLeft: 0, bottomRight: 0)
|
|
}
|
|
|
|
override func allowsTapBackgroundToDismiss() -> Bool {
|
|
return false
|
|
}
|
|
}
|
|
|
|
extension SRVideoRechargeView {
|
|
|
|
private func fa_setupLayout() {
|
|
addSubview(closeButton)
|
|
addSubview(videoCoinsView)
|
|
addSubview(totalCoinsView)
|
|
// addSubview(titleLabel)
|
|
addSubview(scrollView)
|
|
scrollView.addSubview(stackView)
|
|
|
|
closeButton.snp.makeConstraints { make in
|
|
make.right.equalToSuperview().offset(-16)
|
|
make.top.equalToSuperview().offset(12)
|
|
}
|
|
|
|
videoCoinsView.snp.makeConstraints { make in
|
|
make.centerY.equalTo(closeButton)
|
|
make.left.equalToSuperview().offset(16)
|
|
}
|
|
|
|
totalCoinsView.snp.makeConstraints { make in
|
|
make.centerY.equalTo(closeButton)
|
|
make.left.equalTo(videoCoinsView.snp.right).offset(15)
|
|
}
|
|
|
|
// titleLabel.snp.makeConstraints { make in
|
|
// make.left.equalToSuperview().offset(16)
|
|
// make.top.equalToSuperview().offset(39)
|
|
// }
|
|
|
|
scrollView.snp.makeConstraints { make in
|
|
make.left.right.equalToSuperview()
|
|
make.top.equalToSuperview().offset(74)
|
|
make.bottom.equalToSuperview()
|
|
}
|
|
|
|
stackView.snp.makeConstraints { make in
|
|
make.left.centerX.equalToSuperview()
|
|
make.top.equalToSuperview()
|
|
make.bottom.equalToSuperview().offset(-(UIScreen.safeBottom + 10))
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
extension SRVideoRechargeView {
|
|
|
|
@objc private func requestRestore() {
|
|
guard let shortPlayId = self.videoInfo?.short_play_id, let videoId = self.videoInfo?.short_play_video_id else { return }
|
|
|
|
SRIapManager.manager.restore(isLoding: false, shortPlayId: shortPlayId, videoId: videoId) { [weak self] isFinish, buyType in
|
|
if isFinish {
|
|
Task {
|
|
await SRLogin.manager.requestUserInfo(completer: nil)
|
|
self?.buyFinishHandle?()
|
|
await self?.dismiss(animated: true)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
extension SRVideoRechargeView {
|
|
|
|
class CoinsView: UIView {
|
|
var title: String? {
|
|
didSet {
|
|
titleLabel.text = title
|
|
}
|
|
}
|
|
|
|
var coins: Int = 0 {
|
|
didSet {
|
|
coinsLabel.text = "\(coins)"
|
|
}
|
|
}
|
|
|
|
private lazy var titleLabel: UILabel = {
|
|
let label = UILabel()
|
|
label.font = .font(ofSize: 14, weight: .regular)
|
|
label.textColor = .white
|
|
return label
|
|
}()
|
|
|
|
private lazy var iconImageView: UIImageView = {
|
|
let imageView = UIImageView(image: UIImage(named: "bigCoins"))
|
|
return imageView
|
|
}()
|
|
|
|
private lazy var coinsLabel: UILabel = {
|
|
let label = UILabel()
|
|
label.font = .font(ofSize: 14, weight: .bold)
|
|
label.textColor = .white
|
|
return label
|
|
}()
|
|
|
|
override init(frame: CGRect) {
|
|
super.init(frame: frame)
|
|
|
|
addSubview(titleLabel)
|
|
addSubview(iconImageView)
|
|
addSubview(coinsLabel)
|
|
|
|
titleLabel.snp.makeConstraints { make in
|
|
make.centerY.equalToSuperview()
|
|
make.bottom.lessThanOrEqualToSuperview()
|
|
make.left.equalToSuperview()
|
|
}
|
|
|
|
iconImageView.snp.makeConstraints { make in
|
|
make.centerY.equalToSuperview()
|
|
make.bottom.lessThanOrEqualToSuperview()
|
|
make.left.equalTo(titleLabel.snp.right).offset(6)
|
|
}
|
|
|
|
coinsLabel.snp.makeConstraints { make in
|
|
make.centerY.equalToSuperview()
|
|
make.bottom.lessThanOrEqualToSuperview()
|
|
make.left.equalTo(iconImageView.snp.right).offset(4)
|
|
make.right.equalToSuperview()
|
|
}
|
|
}
|
|
|
|
@MainActor required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
}
|
|
|
|
}
|