在 SwiftUI 中,可以使用 blur(radius:) 修饰符来设置高斯模糊。这个修饰符适用于任何视图,包括图片、文本、按钮等。以下是一些关于高斯模糊的使用方法和示例:
基础使用
blur(radius:) 的 radius 参数定义模糊的半径,数值越大模糊效果越明显。
Image("fangjunyu")
.resizable()
.scaledToFit()
.blur(radius: 10) // 设置模糊半径为 10
.frame(width: 300, height: 300)
动态模糊效果
可以使用 @State 或其他绑定值,让模糊效果动态变化。
struct ContentView: View {
@State private var blurRadius: CGFloat = 0
var body: some View {
VStack {
Slider(value: $blurRadius, in: 0...20, step: 1) {
Text("模糊强度")
}
.padding()
Image("fangjunyu")
.resizable()
.scaledToFit()
.blur(radius: blurRadius) // 动态调整模糊半径
.frame(width: 300, height: 300)
}
}
}
模糊效果叠加到背景
在 SwiftUI 中,可以将模糊效果叠加到背景中,通常与 ZStack 配合使用。
ZStack {
Image("fangjunyu")
.resizable()
.scaledToFill()
.frame(width: 400, height: 300)
.clipped()
.blur(radius: 10) // 模糊背景图片
Text("模糊背景示例")
.font(.largeTitle)
.foregroundColor(.white)
}
.frame(width: 400, height: 300)
局部模糊
SwiftUI 的 blur 修饰符作用于整个视图。如果需要局部模糊,可以将要模糊的部分单独放入一个容器(例如 ZStack 或 Group)中,再应用模糊效果。
ZStack {
Image("Mystery")
.resizable()
.scaledToFill()
.frame(width: 300, height: 300)
Rectangle()
.fill(Color.gray.opacity(0.3))
.frame(width: 150, height: 150)
.blur(radius:5) // 模糊局部区域
}
与 CoreImage 结合实现更多自定义模糊效果
如果需要更复杂的模糊效果(例如方向性模糊或动态模糊),可以使用 CoreImage,将自定义处理的图片返回给 SwiftUI。
import SwiftUI
import CoreImage
import CoreImage.CIFilterBuiltins
struct ContentView: View {
let context = CIContext()
let filter = CIFilter.gaussianBlur()
var body: some View {
if let uiImage = applyBlur(to: UIImage(named: "example")!) {
Image(uiImage: uiImage)
.resizable()
.scaledToFit()
}
}
func applyBlur(to inputImage: UIImage) -> UIImage? {
let ciImage = CIImage(image: inputImage)
filter.inputImage = ciImage
filter.radius = 10
guard let outputImage = filter.outputImage,
let cgImage = context.createCGImage(outputImage, from: ciImage!.extent) else {
return nil
}
return UIImage(cgImage: cgImage)
}
}
总结
1、简单模糊:直接使用 blur(radius:)。
2、动态模糊:结合 @State 或 Binding 实现动态模糊。
3、自定义模糊:使用 CoreImage 实现更加复杂的模糊效果。