fix: set window background to black
This commit is contained in:
parent
d62a3f79c1
commit
4879f56ef1
@ -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
|
// MARK: - BricksView wrapper
|
||||||
struct BricksAppView: View {
|
struct BricksAppView: View {
|
||||||
@ObservedObject var bridge: PlayerBridge
|
@ObservedObject var bridge: PlayerBridge
|
||||||
@ -147,15 +184,10 @@ struct BricksAppView: View {
|
|||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
ZStack(alignment: .topLeading) {
|
ZStack(alignment: .topLeading) {
|
||||||
// Bricks 渲染视频播放器(占满全屏)
|
Color.black.ignoresSafeArea()
|
||||||
if let json = jsonString {
|
// 直接用 AVPlayerLayer 渲染视频(彻底绕过 AVPlayerView 内置控制栏)
|
||||||
BricksView(json: json, engine: engine)
|
PlayerLayerView(player: bridge.player)
|
||||||
} else {
|
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||||||
ProgressView("Loading UI...")
|
|
||||||
.task {
|
|
||||||
jsonString = loadJSONString()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 左上角应用图标 — 点击切换控制栏
|
// 左上角应用图标 — 点击切换控制栏
|
||||||
MiniPlayerIcon()
|
MiniPlayerIcon()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user