176 lines
5.0 KiB
Swift
176 lines
5.0 KiB
Swift
//
|
|
// SRDetailRecommendview.swift
|
|
// SynthReel
|
|
//
|
|
// Created by CSGY on 2025/11/27.
|
|
// Copyright © 2025 SR. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
import FSPagerView
|
|
|
|
class SRDetailRecommendview: SRBaseAlert {
|
|
|
|
var clickCloseButton: (() -> Void)?
|
|
var didSelectedVideo: ((_ model: SRShortModel) -> Void)?
|
|
|
|
var dataArr: [SRShortModel] = [] {
|
|
didSet {
|
|
self.pagerView.reloadData()
|
|
|
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) { [weak self] in
|
|
self?.updateCurrentData()
|
|
}
|
|
}
|
|
}
|
|
|
|
private weak var currentCell: SRDetailRecommendCell? {
|
|
didSet {
|
|
oldValue?.pause()
|
|
|
|
currentCell?.play()
|
|
}
|
|
}
|
|
|
|
private lazy var titleLabel: SRLabel = {
|
|
let label = SRLabel()
|
|
label.font = .font(ofSize: 16, weight: .init(900))
|
|
label.textColors = [UIColor._4_CFFD_4.cgColor, UIColor._51_D_4_FF.cgColor]
|
|
label.textStartPoint = .init(x: 0.5, y: 0)
|
|
label.textEndPoint = .init(x: 0.5, y: 1)
|
|
label.text = "Keep the Drama Going".localized
|
|
return label
|
|
}()
|
|
|
|
private lazy var bgView: UIImageView = {
|
|
let view = UIImageView(image: UIImage(named: "recommendBg"))
|
|
view.isUserInteractionEnabled = true
|
|
return view
|
|
}()
|
|
|
|
private lazy var cancelButton: UIButton = {
|
|
let button = UIButton(type: .custom)
|
|
button.setImage(UIImage(named: "Close"), for: .normal)
|
|
button.addTarget(self, action: #selector(handleCancelButton), for: .touchUpInside)
|
|
return button
|
|
}()
|
|
|
|
private lazy var pagerView: FSPagerView = {
|
|
let transformer = SRPagerViewTransformer(type: .linear)
|
|
transformer.minimumScale = 1
|
|
|
|
let view = FSPagerView()
|
|
view.itemSize = .init(width: 132, height: 185)
|
|
view.transformer = transformer
|
|
view.delegate = self
|
|
view.dataSource = self
|
|
view.isInfinite = true
|
|
view.interitemSpacing = 8
|
|
view.register(SRDetailRecommendCell.self, forCellWithReuseIdentifier: "cell")
|
|
return view
|
|
}()
|
|
|
|
override init(frame: CGRect) {
|
|
super.init(frame: frame)
|
|
contentWidth = UIScreen.width
|
|
self.closeButton.isHidden = true
|
|
|
|
self.contentView.backgroundColor = .clear
|
|
self.contentView.layer.cornerRadius = 0
|
|
self.contentView.layer.masksToBounds = false
|
|
|
|
fa_setupLayout()
|
|
}
|
|
|
|
@MainActor required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
|
|
@objc private func handleCancelButton() {
|
|
self.dismiss()
|
|
self.clickCloseButton?()
|
|
}
|
|
|
|
///更新当前数据
|
|
private func updateCurrentData() {
|
|
guard let cell = self.pagerView.cellForItem(at: self.pagerView.currentIndex) as? SRDetailRecommendCell else { return }
|
|
|
|
self.currentCell = cell
|
|
// let model = cell.model
|
|
// self.videoNameLabel.text = model?.name
|
|
}
|
|
|
|
}
|
|
|
|
extension SRDetailRecommendview {
|
|
|
|
private func fa_setupLayout() {
|
|
contentView.addSubview(bgView)
|
|
contentView.addSubview(cancelButton)
|
|
bgView.addSubview(titleLabel)
|
|
bgView.addSubview(pagerView)
|
|
|
|
|
|
bgView.snp.makeConstraints { make in
|
|
make.left.right.equalToSuperview().inset(15)
|
|
make.top.equalToSuperview().offset(-25)
|
|
// make.bottom.e()
|
|
}
|
|
|
|
titleLabel.snp.makeConstraints { make in
|
|
make.top.equalTo(17)
|
|
make.centerX.equalToSuperview()
|
|
}
|
|
|
|
pagerView.snp.makeConstraints { make in
|
|
make.left.right.equalToSuperview().inset(10)
|
|
make.bottom.equalTo(-17)
|
|
make.top.equalTo(titleLabel.snp.bottom).offset(10)
|
|
}
|
|
|
|
cancelButton.snp.makeConstraints { make in
|
|
make.centerX.equalToSuperview()
|
|
make.top.equalTo(bgView.snp.bottom).offset(30)
|
|
make.bottom.equalToSuperview()
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//MARK: FSPagerViewDelegate FSPagerViewDataSource
|
|
extension SRDetailRecommendview: FSPagerViewDelegate, FSPagerViewDataSource {
|
|
|
|
func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell {
|
|
let cell = pagerView.dequeueReusableCell(withReuseIdentifier: "cell", at: index) as! SRDetailRecommendCell
|
|
cell.model = self.dataArr[index]
|
|
return cell
|
|
}
|
|
|
|
func numberOfItems(in pagerView: FSPagerView) -> Int {
|
|
return self.dataArr.count
|
|
}
|
|
|
|
func pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int) {
|
|
didSelectedVideo?(self.dataArr[index])
|
|
self.dismiss()
|
|
}
|
|
|
|
func pagerViewDidEndDecelerating(_ pagerView: FSPagerView) {
|
|
self.updateCurrentData()
|
|
}
|
|
|
|
}
|
|
|
|
extension SRDetailRecommendview {
|
|
|
|
class PageControl: UIPageControl{
|
|
override func size(forNumberOfPages pageCount: Int) -> CGSize {
|
|
return .init(width: 4, height: 4)
|
|
}
|
|
}
|
|
|
|
}
|