import SwiftUI /// 包裹 `RootView` 的薄薄一层:监听 scenePhase,按需在内容之上盖锁屏 / 隐私遮罩。 /// RootView 本身零改动(对齐红线 §10.7「不重构现有 Tab 骨架」)。 /// /// 用法(KangkangApp):`AppLockContainer { RootView() }`。 struct AppLockContainer: View { @ViewBuilder var content: () -> Content @Environment(\.scenePhase) private var scenePhase @State private var appLock = AppLock.shared var body: some View { content() .overlay { if appLock.isLocked { LockScreenView() .transition(.opacity) } else if appLock.showsPrivacyCover { // 不加动画:瞬间出现,抢在系统多任务快照之前盖住内容。 PrivacyCoverView() } } // 只给锁屏淡入淡出;隐私遮罩保持瞬时。 .animation(.easeInOut(duration: 0.2), value: appLock.isLocked) .onAppear { appLock.handleAppear() } .onChange(of: scenePhase) { _, newPhase in appLock.handleScenePhase(newPhase) } } }