SwiftUI — shadow

在 SwiftUI 中,shadow 修饰符用于为视图添加阴影效果,使界面更具层次感和视觉立体感。它可以用于文本、按钮、卡片等 UI 元素。


基本用法 #

shadow 的基本语法如下:

.shadow(color: Color, radius: CGFloat, x: CGFloat, y: CGFloat)
  • color:阴影颜色(默认为黑色)
  • radius:阴影的模糊半径(值越大,阴影越柔和)
  • x:水平方向偏移量(正数向右,负数向左)
  • y:垂直方向偏移量(正数向下,负数向上)

示例:

Text("Hello, SwiftUI!")
    .font(.largeTitle)
    .padding()
    .background(Color.white)
    .shadow(color: .gray, radius: 5, x: 0, y: 5)

这个 shadow 使文本在底部 5 像素处投下灰色阴影。


常见使用场景 #

1. 给卡片添加阴影 #

RoundedRectangle(cornerRadius: 15)
    .fill(Color.white)
    .frame(width: 200, height: 100)
    .shadow(radius: 10) // 默认黑色阴影

这样可以给卡片视图添加柔和的阴影,使其更有层次感。


2. 自定义阴影颜色 #

Circle()
    .fill(Color.blue)
    .frame(width: 100, height: 100)
    .shadow(color: Color.blue.opacity(0.5), radius: 10, x: 0, y: 10)

这个示例使用 Color.blue.opacity(0.5) 让阴影颜色带点透明度,更自然。


3. 多层阴影 #

你可以叠加多个 shadow 以实现不同效果:

Text("Multi Shadow")
    .font(.title)
    .padding()
    .background(Color.white)
    .shadow(color: .black.opacity(0.3), radius: 5, x: 5, y: 5)
    .shadow(color: .blue.opacity(0.3), radius: 10, x: -5, y: -5)

这里分别添加了黑色和蓝色阴影,形成了更立体的效果。


4. 光晕效果 #

如果不想要偏移,而只是让阴影环绕,可以设置 xy0

Image(systemName: "star.fill")
    .font(.system(size: 50))
    .foregroundColor(.yellow)
    .shadow(color: Color.yellow.opacity(0.7), radius: 10, x: 0, y: 0)

这样会形成一个类似发光的光晕效果。


5. 结合 background 使用 #

shadow 作用于 Text 时,最好先加 background,否则阴影会作用于字体,而不是整体块:

Text("Shadow Example")
    .font(.title)
    .padding()
    .background(Color.white)
    .cornerRadius(10)
    .shadow(radius: 10)

background(Color.white) 确保阴影作用在整个区域,而不是仅仅在文本周围。


blur 结合 #

如果你想让阴影更柔和,可以配合 blur 使用:

Rectangle()
    .fill(Color.red)
    .frame(width: 150, height: 100)
    .shadow(color: .red.opacity(0.5), radius: 20)
    .blur(radius: 3)

这会让阴影变得更扩散,类似霓虹灯的效果。


总结 #

  • shadow(radius:) 适用于简单阴影效果
  • shadow(color:radius:x:y:) 允许自定义颜色和方向
  • shadow 适用于文本、图片、形状和容器(ZStackVStack 等)
  • 可以叠加多个 shadow 以实现复杂的视觉效果
  • 结合 background 让阴影作用于整个元素,而非单独的文本
本文共 660 字,创建于 Feb 16, 2025
相关标签: SwiftUI, Xcode