我的目标是创建一个模糊视图,就像下面图片右上角的视图一样。x1c 0d1x
我尝试了this post的前3个答案,但它们都有同样的问题-模糊视图只有一种颜色,而下面有多种颜色。这是我尝试过的解决方案之一:
import SwiftUI
struct ContentView: View {
var body: some View {
ZStack {
VStack{
ForEach(0..<20, id: \.self){ num in
Rectangle()
.frame(height: 20)
.padding(.vertical, 6)
}
}
Blur(style: .systemThinMaterialLight)
.mask(
VStack(spacing: 0) {
Rectangle()
.frame(width: 347, height: 139)
.padding(.top, 0)
Spacer()
}
)
.allowsHitTesting(false)
}
}
}
struct Blur: UIViewRepresentable {
var style: UIBlurEffect.Style = .systemMaterial
func makeUIView(context: Context) -> UIVisualEffectView {
return UIVisualEffectView(effect: UIBlurEffect(style: style))
}
func updateUIView(_ uiView: UIVisualEffectView, context: Context) {
uiView.effect = UIBlurEffect(style: style)
}
}
字符串
的
正如你所看到的,模糊视图只是一个单一的灰色视图,你甚至看不到模糊视图下面的黑色和白色条纹。
我希望模糊视图更透明,就像你在第一张图片中看到的那样,海洋,沙子和阴影仍然可以通过模糊视图看到。我如何在SwiftUI中创建这样的视图?
6条答案
按热度按时间zbq4xfa01#
这段代码非常接近你的问题,它只能从iOS 15开始工作:
字符串
cu6pst1q2#
与其使用两张图片,我更倾向于使用一个绑定,为此,我在资源中添加了一个名为“里昂”的图片。
以下是我的解决方案,减去一些数学:
ContentView
字符串
IceCube()
此视图执行提升操作:
型
显然,要避免在真实的项目中强制展开。
如果你需要一些数学上的想法,看看我在GitHub上对图像进行裁剪和调整大小的repo:
https://github.com/Rillieux/PhotoSelectAndCrop/blob/main/Sources/ImageMoveAndScaleSheet%2BExtensions.swift
基本的想法是,当你想从原始图像中裁剪正方形时,原始图像的大小和尺寸可能与你在屏幕上看到的不完全相同。例如,如果你使用
.aspectRatio(contentMode: .fit)
,图像可能会缩小,所以你需要考虑到这一点。我还没有这样做,这就是为什么模糊不匹配的原因。但是,我想你会明白的。的数据
此外,我这里的例子可以通过使用视图构建器来大大改进,具体来说,就像这样:
型
然后像这样使用它:
IceCube(image: UIImage(named: "lyon")!, containedView: Text("4,7")
个fhg3lkii3#
此方法将高斯模糊应用于视图。
第一个月
主要参数:
true
可创建不透明模糊,或设置为false
可允许透明度。字符串
hfsqlsce4#
我为tvOS写了一个可配置的“视图扩展”(但可能也适用于iOS),保存下面两个文件:
字符串
字符串扩展来计算文本呈现宽度和高度(不呈现),因此可以在extension中使用
型
这样使用它:
型
它应该是这样的:
的数据
g6baxovj5#
iOS 15+ / macOS 12+
只需在SwiftUI中使用新的
foregroundStyle
修饰符即可。范例:
字符串
juud5qan6#
只需添加两张图片,一张名为“海滩”,第二张名为“海滩1”,然后尝试此.
字符串