Visual_Novel_iOS/crush/Crush/Src/Modules/Discover/Leaderboard/LeaderboardPagerMainControl...

192 lines
6.7 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

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.

//
// LeaderboardPagerMainController.swift
// Crush
//
// Created by Leon on 2025/9/9.
//
import JXPagingView
import JXSegmentedView
import UIKit
class LeaderboardPagerMainController: CLBaseViewController {
var navBgIv: UIImageView!
var helpGhostButton: EPIconGhostButton!
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 = JXSegmentedTitleDataSource()
var headerViewHeight = 0// 60
private lazy var chatLeaderboardVc = LeaderboardListController()
private lazy var hearbeatLeaderboardVc = LeaderboardListController()
private lazy var giftLeaderboardVc = LeaderboardListController()
var types = [DiscoverRankType.chat, DiscoverRankType.heartbeat, DiscoverRankType.gift]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
setupViews()
setupDatas()
setupEvents()
}
private func setupViews() {
let title = "Leaderboard"
navigationView.alpha0Title = title
navigationView.bgView.alpha = 0
navBgIv = {
let v = UIImageView()
v.image = UIImage(named: "discover_home_bg_rank")
navigationView.insertSubview(v, aboveSubview: navigationView.bgView)
v.snp.makeConstraints { make in
make.leading.top.trailing.equalToSuperview()
make.height.equalTo(v.snp.width).multipliedBy(v.image!.size.height/v.image!.size.width)
}
return v
}()
helpGhostButton = {
let v = EPIconGhostButton(radius: .none, iconSize: .medium, iconCode: .faq)
v.addTarget(self, action: #selector(tapHelpButton), for: .touchUpInside)
navigationView.rightStackH.addArrangedSubview(v)
navigationView.paddingRightForRightStack = 16
v.snp.makeConstraints { make in
make.size.equalTo(v.bgImageSize())
}
return v
}()
titleView = {
let v = TitleView()
v.optionInnerTopPadding = 16
v.title = title
return v
}()
titleView.frame = CGRect(x: 0, y: 0, width: UIScreen.width, height: titleView.preCalculateHeight())
headerViewHeight = Int(titleView.preCalculateHeight())
// dlog("calclulate: \(headerViewHeight)")
pagingView.mainTableView.backgroundColor = UIColor.clear
pagingView.mainTableView.contentInsetAdjustmentBehavior = .never
pagingView.mainTableView.sectionHeaderHeight = 0
pagingView.mainTableView.sectionFooterHeight = 0
pagingView.mainTableView.estimatedSectionHeaderHeight = 0
pagingView.mainTableView.estimatedSectionFooterHeight = 0
pagingView.mainTableView.estimatedRowHeight = 0
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()
var titles = [String]()
for per in types {
titles.append(per.localizedText)
}
dataSource.titles = titles
segmentedView.listContainer = pagingView.listContainerView
segmentedView.dataSource = dataSource
segmentedView.delegate = self
segmentedView.clNormalStyle()
chatLeaderboardVc.type = .chat
hearbeatLeaderboardVc.type = .heartbeat
giftLeaderboardVc.type = .gift
}
private func setupDatas() {
}
private func setupEvents() {
}
// MARK: Action
@objc private func tapHelpButton(){
let content = "热聊榜以AI聊天会话数高低排名\n心动榜以AI角色所有对话者产生的心动值之和的高低排名\n礼物榜以AI角色所收到礼物打赏价值之和排名"
let alert = Alert(title: "Tips", text: content)
let action1 = AlertAction(title: "Got it", actionStyle: .confirm) {
}
alert.addAction(action1)
alert.show()
}
}
extension LeaderboardPagerMainController: 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 chatLeaderboardVc
} else if index == 1 {
return hearbeatLeaderboardVc
} else {
return giftLeaderboardVc
}
}
func segmentedView(_ segmentedView: JXSegmentedView, didSelectedItemAt index: Int) {
}
func mainTableViewDidScroll(_ scrollView: UIScrollView) {
NaviAlphaHandle.changeNaviViewsAlpha(scrollView: scrollView, alphaViews: [navigationView.titleLabel, navigationView.bgView], oppositeViews: [navBgIv])
}
}
extension LeaderboardPagerMainController: 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)
}
}