142 lines
4.1 KiB
Swift
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
|
|
}
|
|
|
|
|
|
|
|
}
|