From 4879f56ef15e208ff3229613cefbfedc938f08ce Mon Sep 17 00:00:00 2001 From: yumoqing Date: Tue, 23 Jun 2026 08:55:50 +0800 Subject: [PATCH] fix: set window background to black --- Sources/MiniPlayerApp.swift | 50 ++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/Sources/MiniPlayerApp.swift b/Sources/MiniPlayerApp.swift index e0333ce..f336ac4 100644 --- a/Sources/MiniPlayerApp.swift +++ b/Sources/MiniPlayerApp.swift @@ -125,6 +125,43 @@ struct MiniPlayerApp: App { } } +// MARK: - AVPlayerLayer 直接渲染(无内置控制栏) +struct PlayerLayerView: NSViewRepresentable { + let player: AVPlayer + + func makeNSView(context: Context) -> NSView { + let view = PlayerLayerHostView() + view.playerLayer.player = player + view.playerLayer.videoGravity = .resizeAspect + return view + } + + func updateNSView(_ nsView: NSView, context: Context) { + if let host = nsView as? PlayerLayerHostView { + host.playerLayer.player = player + } + } +} + +class PlayerLayerHostView: NSView { + let playerLayer = AVPlayerLayer() + + override init(frame: CGRect) { + super.init(frame: frame) + wantsLayer = true + layer = playerLayer + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layout() { + super.layout() + playerLayer.frame = bounds + } +} + // MARK: - BricksView wrapper struct BricksAppView: View { @ObservedObject var bridge: PlayerBridge @@ -147,15 +184,10 @@ struct BricksAppView: View { var body: some View { ZStack(alignment: .topLeading) { - // Bricks 渲染视频播放器(占满全屏) - if let json = jsonString { - BricksView(json: json, engine: engine) - } else { - ProgressView("Loading UI...") - .task { - jsonString = loadJSONString() - } - } + Color.black.ignoresSafeArea() + // 直接用 AVPlayerLayer 渲染视频(彻底绕过 AVPlayerView 内置控制栏) + PlayerLayerView(player: bridge.player) + .frame(maxWidth: .infinity, maxHeight: .infinity) // 左上角应用图标 — 点击切换控制栏 MiniPlayerIcon()