mirror of
https://github.com/yattee/yattee.git
synced 2024-12-22 05:23:41 +00:00
Fix PiP close on Mac
This commit is contained in:
parent
16fb7087e3
commit
c0053cf837
@ -31,7 +31,9 @@ final class PiPDelegate: NSObject, AVPictureInPictureControllerDelegate {
|
||||
player.controls.objectWillChange.send()
|
||||
}
|
||||
|
||||
func pictureInPictureControllerWillStopPictureInPicture(_: AVPictureInPictureController) {}
|
||||
func pictureInPictureControllerWillStopPictureInPicture(_: AVPictureInPictureController) {
|
||||
player.show()
|
||||
}
|
||||
|
||||
func pictureInPictureController(
|
||||
_: AVPictureInPictureController,
|
||||
|
@ -143,14 +143,12 @@ import SwiftUI
|
||||
}
|
||||
#else
|
||||
struct AppleAVPlayerView: NSViewRepresentable {
|
||||
@State private var pictureInPictureDelegate = MacOSPiPDelegate()
|
||||
|
||||
func makeNSView(context _: Context) -> some NSView {
|
||||
let view = AVPlayerView()
|
||||
view.player = PlayerModel.shared.avPlayerBackend.avPlayer
|
||||
view.showsFullScreenToggleButton = true
|
||||
view.allowsPictureInPicturePlayback = true
|
||||
view.pictureInPictureDelegate = pictureInPictureDelegate
|
||||
view.pictureInPictureDelegate = MacOSPiPDelegate.shared
|
||||
return view
|
||||
}
|
||||
|
||||
|
@ -28,6 +28,7 @@ struct PlayerBackendView: View {
|
||||
{
|
||||
AppleAVPlayerView()
|
||||
} else if !avPlayerUsesSystemControls ||
|
||||
player.playingInPictureInPicture ||
|
||||
player.avPlayerBackend.isStartingPiP
|
||||
{
|
||||
AppleAVPlayerLayerView()
|
||||
|
@ -2,6 +2,8 @@ import AVKit
|
||||
import Foundation
|
||||
|
||||
final class MacOSPiPDelegate: NSObject, AVPlayerViewPictureInPictureDelegate {
|
||||
static let shared = MacOSPiPDelegate()
|
||||
|
||||
var playerModel: PlayerModel { .shared }
|
||||
|
||||
func playerViewShouldAutomaticallyDismissAtPicture(inPictureStart _: AVPlayerView) -> Bool {
|
||||
@ -16,19 +18,14 @@ final class MacOSPiPDelegate: NSObject, AVPlayerViewPictureInPictureDelegate {
|
||||
}
|
||||
|
||||
func playerViewWillStopPicture(inPicture _: AVPlayerView) {
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { [weak self] in
|
||||
self?.playerModel.playingInPictureInPicture = false
|
||||
self?.playerModel.show()
|
||||
}
|
||||
playerModel.show()
|
||||
playerModel.playingInPictureInPicture = false
|
||||
}
|
||||
|
||||
func playerView(
|
||||
_: AVPlayerView,
|
||||
restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: (Bool) -> Void
|
||||
) {
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { [weak self] in
|
||||
self?.playerModel.show()
|
||||
}
|
||||
completionHandler(true)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user