ThimraTV/MoviaBox/Class/Home/View/SPHomeBannerContentCell.swift
2025-06-18 19:26:21 +08:00

104 lines
3.2 KiB
Swift

//
// SPHomeBannerContentCell.swift
// MoviaBox
//
// Created by on 2025/6/18.
//
import UIKit
class SPHomeBannerContentCell: SPHomeContentCell {
override var contentModel: SPHomeContentModel? {
didSet {
bannerView.reloadData()
let bannerModel = contentModel?.list?.first
self.bannerBgImageView.sp_setImage(url: bannerModel?.image_url)
}
}
private lazy var bannerBgImageView: SPFadeEdgeImageView = {
let imageView = SPFadeEdgeImageView()
imageView.contentMode = .scaleAspectFill
return imageView
}()
private lazy var bannerView: ZKCycleScrollView = {
let view = ZKCycleScrollView(frame: .zero, shouldInfiniteLoop: true)
view.itemSize = .init(width: 234, height: 336)
view.itemAlpha = true
view.itemZoomScale = 0.85
view.rotationAngle = 12
view.itemSpacing = 15
view.delegate = self
view.dataSource = self
view.hidesPageControl = true
view.register(SPHomeZoomBannerCell.self, forCellWithReuseIdentifier: "banner")
return view
}()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
sp_setupUI()
}
@MainActor required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension SPHomeBannerContentCell {
private func sp_setupUI() {
contentView.addSubview(bannerBgImageView)
contentView.addSubview(bannerView)
bannerBgImageView.snp.makeConstraints { make in
make.top.equalToSuperview()
make.centerX.equalToSuperview()
make.width.equalTo(kSPScreenWidth)
make.height.equalTo(336)
}
bannerView.snp.makeConstraints { make in
make.edges.equalToSuperview()
make.height.equalTo(336)
}
}
}
//MARK: -------------- ZKCycleScrollViewDelegate & ZKCycleScrollViewDataSource --------------
extension SPHomeBannerContentCell: ZKCycleScrollViewDelegate, ZKCycleScrollViewDataSource {
func cycleScrollView(_ cycleScrollView: ZKCycleScrollView, cellForItemAt index: Int) -> ZKCycleScrollViewCell {
let cell = cycleScrollView.dequeueReusableCell(withReuseIdentifier: "banner", for: index) as! SPHomeZoomBannerCell
cell.model = contentModel?.list?[index]
return cell
}
func numberOfItems(in cycleScrollView: ZKCycleScrollView) -> Int {
return contentModel?.list?.count ?? 0
}
func cycleScrollView(_ cycleScrollView: ZKCycleScrollView, didScrollFromIndex fromIndex: Int, toIndex: Int) {
let model = contentModel?.list?[toIndex]
self.bannerBgImageView.sp_setImage(url: model?.image_url)
}
func cycleScrollView(_ cycleScrollView: ZKCycleScrollView, didSelectItemAt index: Int) {
let model = contentModel?.list?[index]
let vc = SPPlayerDetailViewController()
vc.shortPlayId = model?.short_play_id
self.viewController?.navigationController?.pushViewController(vc, animated: true)
}
}