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