如何在 SwiftUI 中将模糊效果作为背景?

use*_*ser 5 swiftui

我想要模糊效果作为我的视图的背景,正如我们所知,我们可以模糊视图和里面的内容,但我不想要模糊视图内容,但我想要模糊背景视图来提供玻璃般的模糊效果,如下所示我们知道。我如何在 SwiftUi 中做到这一点?

换句话说,视图的下层将在当前视图上的帧中模糊,该视图设置为当前视图的背景。

小智 3

在 iOS 15 中,您可以使用材质,例如.ultraThinMaterial

.background(.ultraThinMaterial)
Run Code Online (Sandbox Code Playgroud)

但从 iOS 14 开始,虽然可以创建 UIViewRepresentable 并将其放置为背景,但没有 SwiftUI 方法可以实现此目的。

以下代码将创建一个可以用作背景的 UIViewRepresentable:.systemUltraThinMaterial可以更改为任何材质

import SwiftUI
struct BlurView: UIViewRepresentable {
    var style: UIBlurEffect.Style = .systemUltraThinMaterial
    func makeUIView(context: Context) -> UIVisualEffectView {
        return UIVisualEffectView(effect: UIBlurEffect(style: style))
    }
    func updateUIView(_ uiView: UIVisualEffectView, context: Context) {
        uiView.effect = UIBlurEffect(style: style)
    }
}
Run Code Online (Sandbox Code Playgroud)

查看扩展名(可选):

extension View {
    func backgroundBlurEffect() -> some View {
        self.background(BlurView())
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在弹出窗口等视图上使用。

.background(BlurView()) 
Run Code Online (Sandbox Code Playgroud)

或者如果像扩展一样使用

.backgroundBlurEffect()
Run Code Online (Sandbox Code Playgroud)

看图片