diff --git a/BeeReel/Class/Class/Explore/View/BRExplorePlayerCell.swift b/BeeReel/Class/Class/Explore/View/BRExplorePlayerCell.swift index 801ac21..145a769 100644 --- a/BeeReel/Class/Class/Explore/View/BRExplorePlayerCell.swift +++ b/BeeReel/Class/Class/Explore/View/BRExplorePlayerCell.swift @@ -22,6 +22,8 @@ class BRExplorePlayerCell: BRPlayerListCell { override init(frame: CGRect) { super.init(frame: frame) NotificationCenter.default.addObserver(self, selector: #selector(updateShortFavoriteStateNotification), name: BRVideoAPI.updateShortFavoriteStateNotification, object: nil) + + self.player.controlAutomaticallyDisappear = false } @MainActor required init?(coder: NSCoder) { diff --git a/BeeReel/Class/Class/Player/View/BRDetailPlayerCell.swift b/BeeReel/Class/Class/Player/View/BRDetailPlayerCell.swift index d023c06..1266d49 100644 --- a/BeeReel/Class/Class/Player/View/BRDetailPlayerCell.swift +++ b/BeeReel/Class/Class/Player/View/BRDetailPlayerCell.swift @@ -14,4 +14,12 @@ class BRDetailPlayerCell: BRPlayerListCell { return BRDetailControlView.self } + override init(frame: CGRect) { + super.init(frame: frame) + self.player.controlAutomaticallyDisappear = true + } + + @MainActor required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } } diff --git a/BeeReel/Class/Class/Player/View/BRPlayerListCell.swift b/BeeReel/Class/Class/Player/View/BRPlayerListCell.swift index 240a36f..eada018 100644 --- a/BeeReel/Class/Class/Player/View/BRPlayerListCell.swift +++ b/BeeReel/Class/Class/Player/View/BRPlayerListCell.swift @@ -89,7 +89,7 @@ class BRPlayerListCell: BRCollectionViewCell, BRPlayerProtocol { return BRPlayerControlView.self } - private lazy var player: BRPlayer = { + private(set) lazy var player: BRPlayer = { let player = BRPlayer(controlView: self.controlView) player.playerView = self.playerView player.delegate = self diff --git a/BeeReel/Class/Lib/Player/BRPlayer.swift b/BeeReel/Class/Lib/Player/BRPlayer.swift index fc976fe..9076fe1 100644 --- a/BeeReel/Class/Lib/Player/BRPlayer.swift +++ b/BeeReel/Class/Lib/Player/BRPlayer.swift @@ -33,6 +33,7 @@ class BRPlayer: NSObject { private lazy var player: SJBaseVideoPlayer = { let player = SJBaseVideoPlayer() + player.delayInSecondsForHiddenPlaceholderImageView = 0 player.autoplayWhenSetNewAsset = false player.resumePlaybackWhenAppDidEnterForeground = false player.accurateSeeking = true @@ -41,6 +42,7 @@ class BRPlayer: NSObject { player.rotationManager?.isDisabledAutorotation = true player.controlLayerDataSource = self player.resumePlaybackWhenPlayerHasFinishedSeeking = false + player.pausedToKeepAppearState = true return player }() @@ -55,7 +57,9 @@ class BRPlayer: NSObject { } } - private(set) weak var br_controlView: BRPlayerControlProtocol?; + private(set) weak var br_controlView: BRPlayerControlProtocol? + ///控制层自动隐藏 + var controlAutomaticallyDisappear = true var coverImageView: UIImageView? { return self.player.presentView.placeholderImageView @@ -90,6 +94,7 @@ class BRPlayer: NSObject { self.br_controlView = controlView setupPlayer() + player.controlLayerNeedAppear() } func setPlayUrl(url: String) { @@ -138,7 +143,21 @@ extension BRPlayer { self.player.gestureController.supportedGestureTypes = .singleTap self.player.gestureController.singleTapHandler = { [weak self] _, _ in guard let self = self else { return } - self.br_controlView?.singleTapEvent() + if !self.player.isControlLayerAppeared { + self.player.controlLayerNeedAppear() + } else { + self.br_controlView?.singleTapEvent() + } + } + + player.canAutomaticallyDisappear = { [weak self] player in + return self?.controlAutomaticallyDisappear ?? false + } + + //控制层显示状态改变 + player.controlLayerAppearObserver.onAppearChanged = { [weak self] manager in + guard let self = self else { return } + self.controlView().isHidden = !manager.isAppeared } //播放完成回调