From 7b3ecfffc59d2d980d9f7628365b64c20fe015be Mon Sep 17 00:00:00 2001 From: Runt <qingingrunt2010@qq.com> Date: Sun, 27 Jul 2025 09:42:03 +0000 Subject: [PATCH] 多个小窗缩放问题修复 --- LiveProject/controller/CameraCapture.swift | 4 +--- LiveProject/activity/stream/LiveActivity.swift | 9 +++++++++ LiveProject/activity/stream/views/MiniWindow.swift | 28 ++++++++++------------------ LiveProject/tool/MetalRenderer.swift | 6 ++---- 4 files changed, 22 insertions(+), 25 deletions(-) diff --git a/LiveProject/activity/stream/LiveActivity.swift b/LiveProject/activity/stream/LiveActivity.swift index d8386f6..3798276 100644 --- a/LiveProject/activity/stream/LiveActivity.swift +++ b/LiveProject/activity/stream/LiveActivity.swift @@ -175,6 +175,15 @@ miniData.hasAudio = true; miniData.hasVideo = false; break; + case .VIDEO: + miniData.hasAudio = true; + miniData.hasVideo = true; + miniData.speakerState = .MUTE; + break; + case .PICTURE: + miniData.hasVideo = true; + miniData.hasAudio = false; + break; default: break } diff --git a/LiveProject/activity/stream/views/MiniWindow.swift b/LiveProject/activity/stream/views/MiniWindow.swift index 53fba14..596b66d 100644 --- a/LiveProject/activity/stream/views/MiniWindow.swift +++ b/LiveProject/activity/stream/views/MiniWindow.swift @@ -31,7 +31,7 @@ //视图比例(相对于 main 尺寸) @Published var viewRate = 0.5 //位置 - @Published var position:CGSize = CGSize(width: 0, height: 0) + @Published var position:CGPoint = CGPoint(x: 0, y: 0) //主选框位置 @Published var mainPosition:CGSize = CGSize(width: 0, height: 0) //main 尺寸 @@ -160,22 +160,22 @@ BottomBtns().background(Color.black.opacity(0.4)).frame(maxWidth: .infinity,maxHeight: .infinity,alignment: .bottom) }.background(Color.blue).frame(width:width,height:height) - .offset(self.miniData.position) + .position(self.miniData.position) .gesture(SimultaneousGesture(DragGesture(minimumDistance: 0) .onChanged{ val in - let x = self.miniData.position.width - let y = self.miniData.position.height + let x = self.miniData.position.x + let y = self.miniData.position.y let newX = x - lastLocation.width + val.translation.width; let newY = y - lastLocation.height + val.translation.height; - self.miniData.position = CGSize(width: newX, height: newY) + self.miniData.position = CGPoint(x: newX, y: newY) //print(" onChanged \(index) \(self.miniData.position) ") lastLocation = val.translation; }.onEnded{ val in - let x = self.miniData.position.width - let y = self.miniData.position.height + let x = self.miniData.position.x + let y = self.miniData.position.y let newX = x - lastLocation.width + val.translation.width; let newY = y - lastLocation.height + val.translation.height; - self.miniData.position = CGSize(width: newX, height: newY) + self.miniData.position = CGPoint(x: newX, y: newY) //print(" onChanged \(index) \(self.miniData.position) ") lastLocation = CGSize(width: 0, height: 0); //print(" onEnded \(val)") @@ -186,8 +186,6 @@ if(miniData.viewRate < 0.4){ miniData.viewRate = 0.4 }else{ - var w = miniData.mainSize.width * l / 2 - self.miniData.position = CGSize(width: self.miniData.position.width - w , height: self.miniData.position.height - w) } } lastZoom = val.magnification; @@ -197,15 +195,9 @@ if(miniData.viewRate < 0.4){ miniData.viewRate = 0.4 }else{ - var w = miniData.mainSize.width * l / 2 - self.miniData.position = CGSize(width: self.miniData.position.width - w , height: self.miniData.position.height - w) } lastZoom = 0; })) - .onAppear{ - - print("onAppear body width = \(width) , height = \(height)") - } } /** @@ -265,8 +257,8 @@ }.frame(maxWidth: .infinity) .padding(EdgeInsets(top: 5, leading: 15, bottom: 5, trailing: 15)) } - - func IconButton(info:IconInfo,action:@escaping ()->Void = {},width:CGFloat = 20,height:CGFloat = 20) -> some View{ + + func IconButton(info:IconInfo,action:@escaping ()->Void = {},width:CGFloat = 20,height:CGFloat = 20, disabled:Bool = true,allow:Bool = true) -> some View{ Button(action:{ print("IconButton ") action() diff --git a/LiveProject/controller/CameraCapture.swift b/LiveProject/controller/CameraCapture.swift index 355b1e0..66d0a0c 100644 --- a/LiveProject/controller/CameraCapture.swift +++ b/LiveProject/controller/CameraCapture.swift @@ -60,9 +60,7 @@ guard let buffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return } let width = CVPixelBufferGetWidth(buffer) let height = CVPixelBufferGetHeight(buffer) - //print("Buffer Size: \(CVPixelBufferGetWidth(buffer))x\(CVPixelBufferGetHeight(buffer))") - //print("Connection orientation: \(connection.videoOrientation.rawValue)") - //print("Rotation angle: \(connection.videoRotationAngle)") + //print("📷 当前帧尺寸: \(width)x\(height)") onFrame?(buffer) } diff --git a/LiveProject/tool/MetalRenderer.swift b/LiveProject/tool/MetalRenderer.swift index 92b2fe4..7b73029 100644 --- a/LiveProject/tool/MetalRenderer.swift +++ b/LiveProject/tool/MetalRenderer.swift @@ -63,11 +63,9 @@ let drawableSize = view.drawableSize guard drawableSize.width > 0, drawableSize.height > 0 else { return } - // 加方向修正:顺时针旋转90度 + // 加方向修正 var orien:CGImagePropertyOrientation = .up; switch self.rotate{ - case 0: - break; case 90: orien = .right; break; @@ -80,7 +78,7 @@ default: orien = .up; } - print(" roate = \(rotate)") + //print(" roate = \(rotate)") var ciImage = CIImage(cvPixelBuffer: pixelBuffer).oriented(orien) // 等比缩放后居中 -- Gitblit v1.9.1