MiniPlayer/Sources/PlayerLayerView.swift

69 lines
1.8 KiB
Swift

import SwiftUI
import AVFoundation
//
#if os(iOS)
struct PlayerLayerView: UIViewRepresentable {
let player: AVPlayer
func makeUIView(context: Context) -> PlayerUIView {
let view = PlayerUIView()
view.playerLayer.player = player
return view
}
func updateUIView(_ uiView: PlayerUIView, context: Context) {
uiView.playerLayer.player = player
}
class PlayerUIView: UIView {
override class var layerClass: AnyClass { AVPlayerLayer.self }
var playerLayer: AVPlayerLayer { layer as! AVPlayerLayer }
override init(frame: CGRect) {
super.init(frame: frame)
playerLayer.videoGravity = .resizeAspect
backgroundColor = .black
}
required init?(coder: NSCoder) { fatalError() }
override func layoutSubviews() {
super.layoutSubviews()
playerLayer.frame = bounds
}
}
}
#else
struct PlayerLayerView: NSViewRepresentable {
let player: AVPlayer
func makeNSView(context: Context) -> PlayerNSView {
let view = PlayerNSView()
view.playerLayer.player = player
return view
}
func updateNSView(_ nsView: PlayerNSView, context: Context) {
nsView.playerLayer.player = player
}
class PlayerNSView: NSView {
let playerLayer = AVPlayerLayer()
override init(frame: CGRect) {
super.init(frame: frame)
playerLayer.videoGravity = .resizeAspect
wantsLayer = true
layer = playerLayer
layer?.backgroundColor = NSColor.black.cgColor
}
required init?(coder: NSCoder) { fatalError() }
override func layout() {
super.layout()
playerLayer.frame = bounds
}
}
}
#endif