Files
Luma/Sources/Shared/UI/Components/InlineVideoPlayer.swift
T
2026-07-30 20:07:51 +07:00

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