122 lines
2.8 KiB
Swift
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) {
|
|
|
|
}
|
|
|
|
}
|