在 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. 光晕效果 #
如果不想要偏移,而只是让阴影环绕,可以设置 x
和 y
为 0
:
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
适用于文本、图片、形状和容器(ZStack
、VStack
等)- 可以叠加多个
shadow
以实现复杂的视觉效果 - 结合
background
让阴影作用于整个元素,而非单独的文本