我想绘制一个带有模糊面板的图像,该面板带有文本。问题是面板框架依赖于文本框架。同时,mask
修饰符的设置与文本和面板是分开的。
我的代码:
struct SomeView: View {
@State var frame: CGRect = .zero
var body: some View {
ZStack {
Image(.defaultCard)
Image(.defaultCard)
.blur(radius: 30)
.mask {
Rectangle()
.frame(width: frame.width, height: frame.height)
.position(x: frame.midX, y: frame.midY)
}
ZStack(alignment: .bottomLeading) {
Color.clear
HStack {
Text("...")
Text("...")
}
.padding()
.background {
GeometryReader { geometry in
Color.clear
.onAppear {
frame = geometry.frame(in: .global)
}
.onChange(of: geometry.size) { _ in
frame = geometry.frame(in: .global)
}
}
}
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
}
所有内容都已绘制,但遮罩位置不正确。以下代码返回了错误的帧:
frame = geometry.frame(in: .global)
如何解决这个问题?我知道我可以使用 UIKit 的模糊功能,但 SwiftUI 模糊功能更符合我的要求。