Visual_Novel_iOS/crush/Crush/Src/Modules/Wallet/WalletMainPagerController.s...

182 lines
5.9 KiB
Swift
Raw Normal View History

2025-10-09 10:29:35 +00:00
//
// WalletMainPagerController.swift
// Crush
//
// Created by Leon on 2025/9/15.
//
import UIKit
import JXPagingView
import JXSegmentedView
import Combine
class WalletMainPagerController: CLBaseViewController {
var titleView: TitleView!
private let segmentedViewHeight = 40
private lazy var segmentedView = JXSegmentedView(frame: CGRect(x: 0, y: 0, width: UIScreen.width, height: CGFloat(segmentedViewHeight)))
private lazy var pagingView = JXPagingListRefreshView(delegate: self)
private var controllers = [JXPagingViewListViewDelegate]()
private let dataSource = JXSegmentedTagStyleDataSource()
var headerViewHeight = 0// 60
lazy var coinsRechargeVc = CoinsRechargeGridController()
lazy var incomeListVc = CoinsIncomeTableController()
var operateView: CoinsRechargeBottomView!
var viewModel = CoinsRechargeViewModel()
private var cancellables = Set<AnyCancellable>()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
setupViews()
setupDatas()
setupEvents()
}
private func setupViews() {
let title = "Wallet"
navigationView.alpha0Title = title
titleView = {
let v = TitleView()
v.title = title
return v
}()
titleView.frame = CGRect(x: 0, y: 0, width: UIScreen.width, height: titleView.preCalculateHeight())
headerViewHeight = Int(titleView.preCalculateHeight())
pagingView.mainTableView.backgroundColor = UIColor.clear
pagingView.mainTableView.contentInsetAdjustmentBehavior = .never
pagingView.listContainerView.listCellBackgroundColor = .clear
if #available(iOS 15.0, *) {
pagingView.mainTableView.sectionHeaderTopPadding = 0
} else {
// Fallback on earlier versions
}
pagingView.mainTableView.gestureDelegate = self
view.addSubview(pagingView)
pagingView.snp.makeConstraints { make in
make.leading.trailing.equalToSuperview()
make.bottom.equalToSuperview()
//make.top.equalToSuperview()
make.top.equalTo(navigationView.snp.bottom)
}
//dataSource.clNormalStyle()
let titles = ["Recharge", "Income"]
dataSource.titles = titles
segmentedView.listContainer = pagingView.listContainerView
segmentedView.dataSource = dataSource
segmentedView.delegate = self
segmentedView.contentEdgeInsetLeft = 24
segmentedView.contentEdgeInsetRight = 24
// segmentedView.clNormalStyle()
operateView = {
let v = CoinsRechargeBottomView()
view.addSubview(v)
v.snp.makeConstraints { make in
make.leading.trailing.bottom.equalToSuperview()
}
return v
}()
}
private func setupDatas(){
}
private func setupEvents(){
operateView.operateButton.addTarget(self, action: #selector(tapRechargeButton), for: .touchUpInside)
// coinsRechargeVc.container.selectIndex
coinsRechargeVc.container.$selectProduct.sink {[weak self] product in
// refresh button title
}
}
// MARK: - Action
@objc private func tapRechargeButton(){
guard let selectProduct = coinsRechargeVc.container.selectProduct, let productId = selectProduct.productId else{
return
}
Hud.showIndicator()
viewModel.purchase(product: selectProduct) { result, tradeNo in
Hud.hideIndicator()
guard let no = tradeNo else{
return
}
selectProduct.tradeId = tradeNo
IAPCore.shared.addPayProductId(productId: productId, tradeId: no)
}
}
}
extension WalletMainPagerController: JXSegmentedViewDelegate, JXPagingViewDelegate {
func tableHeaderViewHeight(in _: JXPagingView) -> Int {
return Int(headerViewHeight)
}
func tableHeaderView(in _: JXPagingView) -> UIView {
return titleView
}
func heightForPinSectionHeader(in _: JXPagingView) -> Int {
return segmentedViewHeight
}
func viewForPinSectionHeader(in _: JXPagingView) -> UIView {
return segmentedView
}
func numberOfLists(in _: JXPagingView) -> Int {
return dataSource.titles.count
}
func pagingView(_: JXPagingView, initListAtIndex index: Int) -> JXPagingViewListViewDelegate {
if index == 0 {
return coinsRechargeVc
} else{
return incomeListVc
}
}
func segmentedView(_ segmentedView: JXSegmentedView, didSelectedItemAt index: Int) {
operateView.isHidden = index != 0
}
func mainTableViewDidScroll(_ scrollView: UIScrollView) {
NaviAlphaHandle.changeNaviViewsAlpha(scrollView: scrollView, alphaViews: [navigationView.titleLabel, navigationView.bgView], oppositeViews: [])
}
}
extension WalletMainPagerController: JXPagingMainTableViewGestureDelegate {
func mainTableViewGestureRecognizer(
_ gestureRecognizer: UIGestureRecognizer,
shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
// UICollectionView
if let panGesture = otherGestureRecognizer as? UIPanGestureRecognizer,
let otherView = otherGestureRecognizer.view,
otherView is UICollectionView {
let velocity = panGesture.velocity(in: otherView)
//
if abs(velocity.x) > abs(velocity.y) {
return false
}
}
return gestureRecognizer.isKind(of: UIPanGestureRecognizer.self)
&& otherGestureRecognizer.isKind(of: UIPanGestureRecognizer.self)
}
}