127 lines
4.1 KiB
Swift
127 lines
4.1 KiB
Swift
//
|
|
// SPHomePageController.swift
|
|
// ShortPlay
|
|
//
|
|
// Created by 曾觉新 on 2025/4/8.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
class SPHomePageController: SPViewController {
|
|
|
|
private var topModel: SPHomeTopModel?
|
|
|
|
private lazy var categoryArr: [SPHomeCategoryModel] = {
|
|
let arr = [
|
|
SPHomeCategoryModel(category_name: "Hot Picks".localized, category_id: nil, viewController: SPHomeViewController()),
|
|
SPHomeCategoryModel(category_name: "Top 10".localized, category_id: nil, viewController: nil),
|
|
SPHomeCategoryModel(category_name: "Fresh Drops".localized, category_id: nil, viewController: nil),
|
|
SPHomeCategoryModel(category_name: "Free".localized, category_id: nil, viewController: nil),
|
|
]
|
|
return arr
|
|
}()
|
|
|
|
private lazy var pageView: JYPageController = {
|
|
let customIndicatorImage = UIImage(named: "page_indicator_icon_01")
|
|
let customIndicator = UIImageView(image: customIndicatorImage)
|
|
|
|
let pageView = JYPageController()
|
|
pageView.delegate = self
|
|
pageView.dataSource = self
|
|
pageView.config.normalTitleColor = .colorD2D2D2()
|
|
pageView.config.selectedTitleColor = .colorBF6BFF()
|
|
pageView.config.normalTitleFont = 14
|
|
pageView.config.selectedTitleFont = 16
|
|
pageView.config.normalTitleFontWeight = .regular
|
|
pageView.config.selectedTitleFontWeight = .medium
|
|
pageView.config.alignment = .scatter
|
|
pageView.config.customIndicator = customIndicator
|
|
pageView.config.indicatorStyle = .customView
|
|
pageView.config.indicatorWidth = customIndicatorImage?.size.width ?? 0
|
|
pageView.config.indicatorHeight = customIndicatorImage?.size.height ?? 0
|
|
pageView.config.leftPadding = 15
|
|
pageView.config.rightPadding = 15
|
|
pageView.config.itemsMargin = 24
|
|
return pageView
|
|
}()
|
|
|
|
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
sp_setupUI()
|
|
|
|
requestData()
|
|
}
|
|
|
|
|
|
override func viewWillAppear(_ animated: Bool) {
|
|
super.viewWillAppear(animated)
|
|
self.navigationController?.setNavigationBarHidden(true, animated: true)
|
|
}
|
|
|
|
}
|
|
|
|
extension SPHomePageController {
|
|
|
|
private func sp_setupUI() {
|
|
addChild(pageView)
|
|
view.addSubview(pageView.view)
|
|
|
|
pageView.view.snp.makeConstraints { make in
|
|
// make.edges.equalToSuperview()
|
|
make.top.equalToSuperview().offset(kSPStatusbarHeight + 66)
|
|
make.left.right.bottom.equalToSuperview()
|
|
}
|
|
}
|
|
}
|
|
|
|
//MARK: -------------- JYPageControllerDelegate & JYPageControllerDataSource --------------
|
|
extension SPHomePageController: JYPageControllerDelegate, JYPageControllerDataSource {
|
|
func pageController(_ pageController: JYPageController, frameForSegmentedView segmentedView: JYSegmentedView) -> CGRect {
|
|
return .init(x: 0, y: 0, width: kSPScreenWidth, height: 40)
|
|
}
|
|
|
|
func pageController(_ pageController: JYPageController, frameForContainerView container: UIScrollView) -> CGRect {
|
|
return .init(x: 0, y: 40, width: kSPScreenWidth, height: kSPScreenHeight - kSPTabBarHeight - kSPStatusbarHeight - 66 - 40)
|
|
}
|
|
|
|
func pageController(_ pageController: JYPageController, titleAt index: Int) -> String {
|
|
return self.categoryArr[index].category_name ?? ""
|
|
}
|
|
|
|
func childController(atIndex index: Int) -> any JYPageChildContollerProtocol {
|
|
let vc = SPHomeViewController()
|
|
vc.topMargins = 15
|
|
return vc
|
|
}
|
|
|
|
|
|
func numberOfChildControllers() -> Int {
|
|
return self.categoryArr.count
|
|
}
|
|
}
|
|
|
|
|
|
extension SPHomePageController {
|
|
|
|
private func requestData() {
|
|
if self.topModel != nil { return }
|
|
|
|
|
|
SPHomeAPI.requestHomeTopData { [weak self] model in
|
|
guard let self = self else { return }
|
|
if let model = model {
|
|
self.topModel = model
|
|
if let category = self.topModel?.category {
|
|
self.categoryArr += category
|
|
}
|
|
self.pageView.reload()
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|