104 lines
3.2 KiB
Swift
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)
|
|
}
|
|
}
|