From 3b7521a47ae731f0bf0a922822e4417493489539 Mon Sep 17 00:00:00 2001 From: Runt <qingingrunt2010@qq.com> Date: Wed, 09 Jul 2025 10:42:02 +0000 Subject: [PATCH] 小窗布局,小窗移动 --- LiveProject/activity/stream/LiveActivity.swift | 22 +++++++++++++++++++--- 1 files changed, 19 insertions(+), 3 deletions(-) diff --git a/LiveProject/activity/stream/LiveActivity.swift b/LiveProject/activity/stream/LiveActivity.swift index 57e7890..045e563 100644 --- a/LiveProject/activity/stream/LiveActivity.swift +++ b/LiveProject/activity/stream/LiveActivity.swift @@ -25,6 +25,7 @@ DeviceInfo(name: "话筒", type: .MICROPHONE,deviceId: UUID().uuidString,icon: Icons.MIC), DeviceInfo(name: "系统", type: .SYSTEM,deviceId : UUID().uuidString,icon: Icons.PORTRAIT)] + @State private var miniWindows:Array<MiniWindowData> = [] @StateObject private var mViewModel = LiveViewModel() @@ -32,10 +33,14 @@ ZStack{ Color.clear .ignoresSafeArea() // 填满全屏 - VStack{ + ZStack{ VideoRendererView(pixelBuffer: $mViewModel.pixelBuffer).background(Color.black).frame(width: mainSize.width,height:mainSize.height) - Spacer() + .frame(maxWidth: .infinity,maxHeight: .infinity,alignment: .topTrailing) + ForEach(miniWindows, id: \.id) { miniWindow in + NewMiniWindow(miniWindow: miniWindow) + } }.border(Color.blue) + VStack{ Spacer() BottomBtns().frame(alignment: .bottom).border(Color.green) @@ -156,8 +161,9 @@ withAnimation{ showDeviceDialog = false; } + miniWindows.append(MiniWindowData(streamType: device.type)) } - print("\(device.name) click") + print("\(device.name) click \(self.miniWindows.count)") } } } @@ -221,6 +227,16 @@ } } } + + func NewMiniWindow(miniWindow:MiniWindowData) -> some View{ + MiniWindow(miniData: miniWindow) + .frame(maxWidth: .infinity,maxHeight: .infinity,alignment: .topLeading) + .onCloseClick { + guard let index = miniWindows.firstIndex(where: { $0.id == miniWindow.id }) else { return } + miniWindows.remove(at: index) + } + } + } -- Gitblit v1.9.1