// // 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) } }