From 2b51baa1981fb445b938e64bdce539e58fe70264 Mon Sep 17 00:00:00 2001 From: Runt <qingingrunt2010@qq.com> Date: Sat, 26 Jul 2025 13:17:14 +0000 Subject: [PATCH] 小窗缩放, 相机转小窗显示 小窗旋转,相机画面旋转 关闭按钮优化 --- LiveProject/views/VideoRendererView.swift | 44 ++++++++++++++++++++++++++++++++------------ 1 files changed, 32 insertions(+), 12 deletions(-) diff --git a/LiveProject/views/VideoRendererView.swift b/LiveProject/views/VideoRendererView.swift index 67fdc70..79a63a1 100644 --- a/LiveProject/views/VideoRendererView.swift +++ b/LiveProject/views/VideoRendererView.swift @@ -8,19 +8,39 @@ import MetalKit struct VideoRendererView: UIViewRepresentable { - let renderer: MetalRenderer // 自定义 Metal 渲染器,支持传入 RGBA/YUV 数据帧 + @Binding var pixelBuffer: CVPixelBuffer? + @Binding var rotate:Int?; - func makeUIView(context: Context) -> MTKView { - let view = MTKView() - view.device = MTLCreateSystemDefaultDevice() - view.colorPixelFormat = .bgra8Unorm - view.clearColor = MTLClearColor(red: 0.2, green: 0.5, blue: 0.7, alpha: 1.0) - view.delegate = renderer - view.isPaused = false - view.enableSetNeedsDisplay = false - renderer.setup(view: view) - return view + //用 Coordinator 缓存实例 + func makeCoordinator() -> Coordinator { + return Coordinator() } - func updateUIView(_ uiView: MTKView, context: Context) {} + func makeUIView(context: Context) -> MTKView { + return context.coordinator.mtkView + } + + func updateUIView(_ uiView: MTKView, context: Context) { + if let buffer = pixelBuffer { + //print("updateUIView") + context.coordinator.renderer.display(pixelBuffer: buffer) + } + if let angle = rotate{ + //print("updateUIView rotate \(angle)") + context.coordinator.renderer.updateRotate(angle: angle) + } + } + + + class Coordinator { + let mtkView: MTKView + let renderer: MetalRenderer + + init() { + print("📦 MetalRendererWrapper 初始化了") + mtkView = MTKView() + renderer = MetalRenderer(mtkView: mtkView) + } + } } + -- Gitblit v1.9.1