You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI实现视图与文本局部透明效果的技术求助

SwiftUI实现局部透明透出背景渐变的解决方案

要实现让指定区域透出背景渐变的效果,核心是利用混合模式将目标区域从白色背景中"挖空",而非直接设置透明度。以下是修改后的代码及说明:

struct CircleView: View {
    var body: some View {
        ZStack {
            // 底层背景渐变
            LinearGradient(colors: [.mint, .cyan], startPoint: .topLeading, endPoint: .bottomTrailing)
            
            HStack(spacing: -20) {
                // 左侧牛油果白色圆圈
                ZStack {
                    Circle()
                        .frame(width: 120, height: 120)
                        .foregroundColor(.white)
                    Text("🥑")
                        .font(.system(size: 60))
                }
                
                // 右侧带透明边框+文字的圆圈
                ZStack {
                    // 白色基础背景层
                    Circle()
                        .fill(.white)
                        .frame(width: 75, height: 75)
                    
                    // 需要透出背景的内容(边框+文字)
                    ZStack {
                        Circle()
                            .strokeBorder(lineWidth: 5)
                        VStack {
                            Text("108")
                            Text("Days")
                        }
                        .font(.bold)
                    }
                    // 混合模式:将该区域从白色背景中挖空
                    .blendMode(.destinationOut)
                }
                // 合成组:确保混合模式仅作用于当前ZStack内部元素
                .compositingGroup()
            }
        }
    }
}

关键逻辑说明

  • 混合模式:.blendMode(.destinationOut)会将当前视图区域的底层内容(白色背景)清除,从而透出更下方的渐变背景。
  • 合成组:.compositingGroup()将右侧ZStack的内容打包为一个独立渲染单元,避免混合模式影响其他视图的显示。
  • 移除了原代码中的.purple设置,因为我们不需要实际的紫色填充,而是要让这些区域变为透明通道,透出背景渐变。

内容的提问来源于stack exchange,提问作者Nizami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:20:22