首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不改变视觉效果的情况下用Swift材料更改视图的不透明度

在不改变视觉效果的情况下用Swift材料更改视图的不透明度
EN

Stack Overflow用户
提问于 2021-12-23 11:00:50
回答 1查看 421关注 0票数 -1

我试图动画在SwiftUI中的(图像)视图的转换,该视图是使用系统物质视觉效果来模糊的:

代码语言:javascript
复制
ZStack {
   Image(uiImage: UIImage(named: "Landscape-Color.jpg")!)
      .resizable()
      .aspectRatio(contentMode: .fit)
      .frame(width: 200, height: 200)
   VisualEffectView(UIBlurEffect(style: .systemThinMaterial))
   Text("Hello, world!")
}.opacity(0.5)

您可以找到一个有完整代码示例这里的游乐场。

这一转变应该在不改变快速材料的模糊效果的情况下,激发视图的不透明度。正如您在下面的代码示例和图片中所看到的,设置不透明度会减少模糊效果,并使底层内容更加可见。在我的示例中,当视图被移除时,视觉效果不应该改变。

我正在寻找一个解决方案,如何降低不透明的ZStack,而不改变外观的视觉效果。(只有后面的蓝色背景应该更可见,而不是视图中的图片)。

任何帮助都是非常感谢的,我不介意解决方案是在SwiftUI还是UIKit中,只要我可以在SwiftUI中嵌入任何东西。如果有什么不清楚的地方请告诉我。

EN

回答 1

Stack Overflow用户

发布于 2021-12-23 13:32:03

你有没有试过把他的照片放进.background

代码语言:javascript
复制
import SwiftUI

@available(iOS 15.0, *)
struct OpacityView: View {
    @State var opacity: CGFloat = 0.5
    var body: some View {
        VStack{
            Slider(value: $opacity)
            ZStack {
                Color.blue
                //Other View elements here
                Text("Hello, world!")
            }.opacity(opacity)
            
        }.background(
            Image(systemName: "person")
                .resizable()
                .aspectRatio(contentMode: .fit)
                .frame(width: 200, height: 200)
                .overlay(Material.ultraThin)
        )
        
    }
}
@available(iOS 15.0, *)
struct OpacityView_Previews: PreviewProvider {
    static var previews: some View {
        OpacityView()
    }
}

它似乎提供了你想要的效果。

不透明度== 0

不透明度== 0.5

不透明度== 1

在1处,图像被Color隐藏,因为它在ZStack后面。如果这不是你想要的,你能

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70461191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档