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

142 lines
4.1 KiB
Swift

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