MoviaBox/ShortPlay/Class/Home/Controller/SPHomePageController.swift
2025-04-14 16:32:48 +08:00

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