ThimraTV/MoviaBox/Class/Player/View/SPPlayerDetailRecommandCell.swift
2025-05-15 15:31:06 +08:00

98 lines
2.5 KiB
Swift

//
// SPPlayerDetailRecommandCell.swift
// MoviaBox
//
// Created by on 2025/5/12.
//
import UIKit
class SPPlayerDetailRecommandCell: ZKCycleScrollViewCell {
var model: SPShortModel? {
didSet {
coverImageView.sp_setImage(url: model?.image_url)
player.setPlayUrl(url: model?.video_url ?? "")
}
}
private(set) lazy var player: SPPlayer = {
let player = SPPlayer()
player.playerView = playerView
player.delegate = self
return player
}()
var isCurrentPlayer: Bool = false {
didSet {
if !isCurrentPlayer {
coverImageView.isHidden = false
}
}
}
private lazy var coverImageView: SPImageView = {
let imageView = SPImageView()
return imageView
}()
private lazy var playerView: UIView = {
let view = UIView()
return view
}()
override init(frame: CGRect) {
super.init(frame: frame)
contentView.layer.cornerRadius = 6
contentView.layer.masksToBounds = true
_setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension SPPlayerDetailRecommandCell {
private func _setupUI() {
contentView.addSubview(playerView)
contentView.addSubview(coverImageView)
playerView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
coverImageView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
}
}
//MARK: -------------- SPPlayerDelegate --------------
extension SPPlayerDetailRecommandCell: SPPlayerDelegate {
func sp_player(_ player: SPPlayer, loadStateDidChange state: SPPlayer.LoadState) {
updateCoverShowState()
}
func sp_player(_ player: SPPlayer, playStateDidChanged state: SPPlayer.PlayState) {
// if state == .playing, isCurrentPlayer {
// self.coverImageView.isHidden = true
// }
updateCoverShowState()
}
///
private func updateCoverShowState() {
let loadState = self.player.loadState
let playState = self.player.playState
if isCurrentPlayer && (loadState == .playable || loadState == .playthroughOK) && (playState == .playing) {
self.coverImageView.isHidden = true
}
}
}