74 lines
1.6 KiB
Swift
74 lines
1.6 KiB
Swift
import AVFoundation
|
|
import SwiftUI
|
|
|
|
#if os(iOS)
|
|
import UIKit
|
|
|
|
struct InlineVideoPlayer: UIViewRepresentable {
|
|
let player: AVPlayer
|
|
|
|
func makeUIView(context: Context) -> PlayerView {
|
|
let view = PlayerView()
|
|
view.playerLayer.player = player
|
|
return view
|
|
}
|
|
|
|
func updateUIView(_ uiView: PlayerView, context: Context) {
|
|
uiView.playerLayer.player = player
|
|
}
|
|
|
|
final class PlayerView: UIView {
|
|
override class var layerClass: AnyClass { AVPlayerLayer.self }
|
|
|
|
var playerLayer: AVPlayerLayer {
|
|
layer as! AVPlayerLayer
|
|
}
|
|
|
|
override init(frame: CGRect) {
|
|
super.init(frame: frame)
|
|
playerLayer.videoGravity = .resizeAspectFill
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
nil
|
|
}
|
|
}
|
|
}
|
|
#elseif os(macOS)
|
|
import AppKit
|
|
|
|
struct InlineVideoPlayer: NSViewRepresentable {
|
|
let player: AVPlayer
|
|
|
|
func makeNSView(context: Context) -> PlayerView {
|
|
let view = PlayerView()
|
|
view.playerLayer.player = player
|
|
return view
|
|
}
|
|
|
|
func updateNSView(_ nsView: PlayerView, context: Context) {
|
|
nsView.playerLayer.player = player
|
|
}
|
|
|
|
final class PlayerView: NSView {
|
|
let playerLayer = AVPlayerLayer()
|
|
|
|
override init(frame frameRect: NSRect) {
|
|
super.init(frame: frameRect)
|
|
wantsLayer = true
|
|
layer = playerLayer
|
|
playerLayer.videoGravity = .resizeAspectFill
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
nil
|
|
}
|
|
|
|
override func layout() {
|
|
super.layout()
|
|
playerLayer.frame = bounds
|
|
}
|
|
}
|
|
}
|
|
#endif
|