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