BeeReel/BeeReel/Class/Player/View/BRPlayerListCell.swift
2025-07-21 19:58:36 +08:00

144 lines
2.9 KiB
Swift

//
// BRPlayerListCell.swift
// BeeReel
//
// Created by on 2025/6/24.
//
import UIKit
class BRPlayerListCell: BRCollectionViewCell, BRPlayerProtocol {
weak var viewModel: BRPlayerViewModel? {
didSet {
self.controlView.viewModel = viewModel
}
}
var shortModel: BRShortModel? {
didSet {
self.controlView.shortModel = shortModel
self.player.coverImageView?.br_setImage(url: shortModel?.image_url)
}
}
var videoInfo: BRVideoInfoModel? {
didSet {
self.controlView.videoInfo = videoInfo
player.setPlayUrl(url: videoInfo?.video_url ?? "")
}
}
var isCurrent: Bool = false {
didSet {
self.controlView.isCurrent = isCurrent
}
}
var duration: Int = 0
var currentPosition: Int = 0
var rate: Float = 1 {
didSet {
self.player.rate = rate
}
}
func prepare() {
}
func start() {
player.start()
}
func pause() {
player.pause()
}
func stop() {
player.stop()
}
func replay() {
}
func seekToTime(toTime: Int) {
}
var ControlViewClass: BRPlayerControlView.Type {
return BRPlayerControlView.self
}
private lazy var player: BRPlayer = {
let player = BRPlayer(controlView: self.controlView)
player.playerView = self.playerView
player.delegate = self
return player
}()
private lazy var playerView: UIView = {
let view = UIView()
return view
}()
private lazy var controlView: BRPlayerControlView = {
let view = ControlViewClass.init()
return view
}()
override init(frame: CGRect) {
super.init(frame: frame)
br_setupUI()
}
@MainActor required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension BRPlayerListCell {
private func br_setupUI() {
contentView.addSubview(playerView)
playerView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
}
}
//MARK: -------------- BRPlayerDelegate --------------
extension BRPlayerListCell: BRPlayerDelegate {
func br_playerDidPlayFinish(_ player: BRPlayer) {
self.viewModel?.playFinish(player: self)
}
func br_playerDurationDidChange(_ player: BRPlayer, duration: TimeInterval) {
self.controlView.durationTime = duration
}
func br_playerCurrentTimeDidChange(_ player: BRPlayer, time: TimeInterval) {
self.controlView.currentTime = time
if player.duration <= 0 {
self.controlView.progress = 0
} else {
self.controlView.progress = time / player.duration
}
}
}