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

182 lines
5.9 KiB
Swift
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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)
}
}