// // SPHomeHeaderView.swift // ShortPlay // // Created by 曾觉新 on 2025/4/14. // import UIKit class SPHomeHeaderView: UICollectionReusableView { var moduleModel: SPHomeModuleModel? { didSet { stackView.removeAllArrangedSubview() stackView.addArrangedSubview(bannerView) bannerView.reloadData() // if (moduleModel?.recommandData?.count ?? 0) > 0 { // } stackView.addArrangedSubview(trendingView) trendingView.dataArr = moduleModel?.bannerData stackView.addArrangedSubview(hotView) hotView.dataArr = moduleModel?.bannerData stackView.addArrangedSubview(shortsForYouView) shortsForYouView.dataArr = moduleModel?.bannerData } } private lazy var stackView: UIStackView = { let view = UIStackView() view.axis = .vertical view.spacing = 25 return view }() private lazy var bannerView: ZKCycleScrollView = { let bannerView = ZKCycleScrollView(frame: .zero, shouldInfiniteLoop: true); bannerView.delegate = self bannerView.dataSource = self bannerView.itemSpacing = 10 bannerView.itemSize = CGSize(width: kSPScreenWidth - 30, height: Self.bannerHeight()) bannerView.register(SPHomeBannerCell.self, forCellWithReuseIdentifier: "bannerCell") bannerView.hidesPageControl = true bannerView.snp.makeConstraints { make in make.width.equalTo(kSPScreenWidth) make.height.equalTo(Self.bannerHeight()) } return bannerView }() private lazy var trendingView: SPHomeTrendingView = { let view = SPHomeTrendingView() return view }() private lazy var hotView: SPHomeHotView = { let view = SPHomeHotView() return view }() private lazy var shortsForYouView: SPHomeShortsForYouView = { let view = SPHomeShortsForYouView() return view }() override init(frame: CGRect) { super.init(frame: frame) _setupUI() } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } } extension SPHomeHeaderView { private func _setupUI() { addSubview(stackView) stackView.snp.makeConstraints { make in make.edges.equalToSuperview() } } } //MARK: -------------- ZKCycleScrollViewDelegate & ZKCycleScrollViewDataSource -------------- extension SPHomeHeaderView: ZKCycleScrollViewDelegate, ZKCycleScrollViewDataSource { func numberOfItems(in cycleScrollView: ZKCycleScrollView) -> Int { return moduleModel?.bannerData?.count ?? 0 } func cycleScrollView(_ cycleScrollView: ZKCycleScrollView, cellForItemAt index: Int) -> ZKCycleScrollViewCell { let cell = cycleScrollView.dequeueReusableCell(withReuseIdentifier: "bannerCell", for: index) as! SPHomeBannerCell cell.model = moduleModel?.bannerData?[index] return cell } func cycleScrollView(_ cycleScrollView: ZKCycleScrollView, didSelectItemAt index: Int) { let model = moduleModel?.bannerData?[index] let vc = SPPlayerDetailViewController() vc.shortPlayId = model?.short_play_id self.viewController?.navigationController?.pushViewController(vc, animated: true) } } extension SPHomeHeaderView { static func contentHeight(model: SPHomeModuleModel) -> CGFloat { var height = bannerHeight() // if (model.recommandData?.count ?? 0) > 0 { // } height = height + SPHomeTrendingView.contentHeight(dataArr: model.bannerData ?? []) + 25 height = height + SPHomeHotView.contentHeight(dataArr: model.bannerData ?? []) + 25 height = height + SPHomeShortsForYouView.contentHeight(dataArr: model.bannerData ?? []) + 25 return height } static func bannerHeight() -> CGFloat { return 183 } }