From c84bd4d12d079cc797b3586c795a754e34729404 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Tue, 24 Mar 2026 15:13:21 +0800 Subject: [PATCH] fix View --- punchnet/Views/Common/VisualEffectView.swift | 26 +++++++++++++++ punchnet/Views/Register/RegisterView.swift | 33 ++++++++----------- .../ResetPassword/ResetPasswordView.swift | 33 ++++++++----------- 3 files changed, 54 insertions(+), 38 deletions(-) create mode 100644 punchnet/Views/Common/VisualEffectView.swift diff --git a/punchnet/Views/Common/VisualEffectView.swift b/punchnet/Views/Common/VisualEffectView.swift new file mode 100644 index 0000000..e7dc08e --- /dev/null +++ b/punchnet/Views/Common/VisualEffectView.swift @@ -0,0 +1,26 @@ +// +// VisualEffectView.swift +// punchnet +// +// Created by 安礼成 on 2026/3/24. +// +import SwiftUI + +// MARK: - 1. 基础 UI 组件 (已修正 Material 枚举) +struct VisualEffectView: NSViewRepresentable { + let material: NSVisualEffectView.Material + let blendingMode: NSVisualEffectView.BlendingMode + + func makeNSView(context: Context) -> NSVisualEffectView { + let view = NSVisualEffectView() + view.material = material + view.blendingMode = blendingMode + view.state = .active + return view + } + + func updateNSView(_ nsView: NSVisualEffectView, context: Context) { + nsView.material = material + nsView.blendingMode = blendingMode + } +} diff --git a/punchnet/Views/Register/RegisterView.swift b/punchnet/Views/Register/RegisterView.swift index 53637c5..077ada4 100644 --- a/punchnet/Views/Register/RegisterView.swift +++ b/punchnet/Views/Register/RegisterView.swift @@ -13,27 +13,22 @@ struct RegisterRootView: View { @Environment(AppContext.self) private var appContext: AppContext var body: some View { - ZStack { - Color.clear - .ignoresSafeArea() - - ZStack(alignment: .center) { - switch registerModel.stage { - case .requestVerifyCode: - RegisterRequestVerifyCodeView() - case .submitVerifyCode: - RegisterSubmitVerifyCodeView() - case .setPassword: - RegisterSetPasswordView() - case .success: - RegisterSuccessView() - } + ZStack(alignment: .center) { + switch registerModel.stage { + case .requestVerifyCode: + RegisterRequestVerifyCodeView() + case .submitVerifyCode: + RegisterSubmitVerifyCodeView() + case .setPassword: + RegisterSetPasswordView() + case .success: + RegisterSuccessView() } - .transition(.asymmetric( - insertion: .move(edge: registerModel.transitionEdge).combined(with: .opacity), - removal: .move(edge: registerModel.transitionEdge == .trailing ? .leading : .trailing).combined(with: .opacity) - )) } + .transition(.asymmetric( + insertion: .move(edge: registerModel.transitionEdge).combined(with: .opacity), + removal: .move(edge: registerModel.transitionEdge == .trailing ? .leading : .trailing).combined(with: .opacity) + )) .environment(registerModel) // --- 核心改动:使用 overlay --- .overlay(alignment: .topLeading) { diff --git a/punchnet/Views/ResetPassword/ResetPasswordView.swift b/punchnet/Views/ResetPassword/ResetPasswordView.swift index 15aea34..b087077 100644 --- a/punchnet/Views/ResetPassword/ResetPasswordView.swift +++ b/punchnet/Views/ResetPassword/ResetPasswordView.swift @@ -13,27 +13,22 @@ struct ResetPasswordRootView: View { @Environment(AppContext.self) private var appContext: AppContext var body: some View { - ZStack { - Color.clear - .ignoresSafeArea() - - ZStack(alignment: .center) { - switch resetPasswordModel.stage { - case .requestVerifyCode: - GetVerifyCodeView() - case .submitVerifyCode: - SubmitVerifyCodeView() - case .resetPassword: - ResetPasswordView() - case .success: - ResetPasswordSuccessView() - } + ZStack(alignment: .center) { + switch resetPasswordModel.stage { + case .requestVerifyCode: + GetVerifyCodeView() + case .submitVerifyCode: + SubmitVerifyCodeView() + case .resetPassword: + ResetPasswordView() + case .success: + ResetPasswordSuccessView() } - .transition(.asymmetric( - insertion: .move(edge: resetPasswordModel.transitionEdge).combined(with: .opacity), - removal: .move(edge: resetPasswordModel.transitionEdge == .trailing ? .leading : .trailing).combined(with: .opacity) - )) } + .transition(.asymmetric( + insertion: .move(edge: resetPasswordModel.transitionEdge).combined(with: .opacity), + removal: .move(edge: resetPasswordModel.transitionEdge == .trailing ? .leading : .trailing).combined(with: .opacity) + )) .environment(resetPasswordModel) .overlay(alignment: .topLeading) { // 仅在非成功页面显示返回按钮