// // 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 } } }