MoviaBox/ShortPlay/Class/Player/View/SPPlayerListCell.swift
2025-04-09 18:24:58 +08:00

122 lines
2.8 KiB
Swift

//
// SPPlayerListCell.swift
// ShortPlay
//
// Created by on 2025/4/9.
//
import UIKit
class SPPlayerListCell: SPCollectionViewCell, SPPlayerProtocol {
private lazy var player: SPPlayer = {
let player = SPPlayer()
player.playerView = playerView
player.delegate = self
return player
}()
private lazy var playerView: UIView = {
let view = UIView()
return view
}()
private lazy var coverImageView: SPImageView = {
let imageView = SPImageView()
return imageView
}()
private lazy var controlView: SPPlayerControlView = {
let view = SPPlayerControlView()
view.panProgressFinishBlock = { [weak self] progress in
guard let self = self else { return }
let duration = CGFloat(self.player.duration)
let toTime = progress * duration
self.player.seekToTime(toTime: Int(toTime))
}
return view
}()
override init(frame: CGRect) {
super.init(frame: frame)
sp_setupUI()
}
@MainActor required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
//MARK: SPPlayerProtocol
var model: Any? {
didSet {
guard let model = model as? SPShortModel else { return }
player.setPlayUrl(url: model.video_info?.video_url ?? "")
coverImageView.sp_setImage(url: model.image_url)
}
}
var isCurrent: Bool = false
///
var playerFinishHadle: (() -> Void)?
func prepare() {
// player.prepare()
}
func start() {
player.start()
}
func pause() {
player.pause()
}
}
extension SPPlayerListCell {
private func sp_setupUI() {
contentView.addSubview(coverImageView)
contentView.addSubview(playerView)
contentView.addSubview(controlView)
coverImageView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
playerView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
controlView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
}
}
//MARK: -------------- SPPlayerDelegate --------------
extension SPPlayerListCell: SPPlayerDelegate {
func sp_playCompletion(_ player: SPPlayer) {
}
func sp_playLoadingEnd(_ player: SPPlayer) {
}
func sp_playTimeChanged(_ player: SPPlayer, currentTime: Int, duration: Int) {
controlView.progress = CGFloat(currentTime) / CGFloat(duration)
}
func sp_firstRenderedStart(_ player: SPPlayer) {
}
}