Liquid Glass 是什么?
简单说,它是苹果为 iOS 26、iPadOS 26 及 watchOS 11 打造的新视觉语言,特点如下:
• 分层设计:玻璃层始终漂浮在主内容之上,不与主 UI 争抢视觉焦点。
• 动态模糊:系统实时采样下方内容,进行模糊和着色处理,让玻璃像水滴一样“融”进背景。
• 统一动效:交互时,玻璃会有微妙的尺寸变化和高光闪烁,如同液体流动。
一句话:它既是装饰,也是交互的一部分。
基础用法:glassEffect() 三连击
在 SwiftUI 中,苹果提供 glassEffect() 修饰符,一行代码就能实现玻璃效果:
Button { // TODO: Action
} label: {
Label("Home", systemImage: "house")
.labelStyle(.iconOnly)
.frame(width: 50, height: 50)
.foregroundColor(.red)
}.glassEffect() // 默认玻璃
若没看到效果,大概率是给按钮加了不透明背景,去掉背景就能呈现通透感!
1、给玻璃上色——tint()
.glassEffect(.regular.tint(.purple.opacity(0.8)))
• regular:强度,系统预设 .thin / .regular / .thick 三档。
• tint:给玻璃液滴添色,记得配合 opacity,避免颜色过实。
2、让玻璃活起来—— interactive()
.glassEffect(.regular.tint(.purple).interactive())
点按时按钮会略微放大并伴随特效,这个细节能让用户觉得“这东西像真的液体!”
3、把玻璃们“粘”在一起—— glassEffectID()
多个玻璃组件靠近时,给它们设置同一个 ID,系统会将其渲染成“一整块”:
@Namespace var glassNS
Button("A") {}
.glassEffect(.regular)
.glassEffectID("menu", in: glassNS)
Button("B") {}
.glassEffect(.regular)
.glassEffectID("menu", in: glassNS)
配合 GlassEffectContainer { ..、} 使用,性能更稳定,不会掉帧。
实战 Demo:制作 Path 风格的漂浮菜单
最终效果:中间一个 + 号,点开后四个子按钮像水珠一样弹射出来,收起时又自动融合成一整滴玻璃。
import SwiftUI
struct FloatingMenu: View {
enum Item: String, CaseIterable {
case home = "house", write = "pencil", chat = "bubble.left", mail = "envelope"
var offset: CGSize {
switch self {
case .home: return CGSize(width: -0, height: -70)
case .write: return CGSize(width: 0, height: -140)
case .chat: return CGSize(width: 0, height: -210)
case .mail: return CGSize(width: 0, height: -280)
}
}
}
@State private var expand = false
@Namespace private var ns
var body: some View {
GlassEffectContainer {
// 使用 ZStack 让所有按钮共享同一坐标系
ZStack(alignment: .bottomTrailing) {
ForEach(Item.allCases, id: \.self) { item in
Button {
print("点击")
} label: {
Image(systemName: item.rawValue)
.frame(width: 44, height: 44)
.foregroundColor(.white)
.opacity(expand ? 1 : 0)
}
.buttonStyle(.glass)
.offset(expand ? item.offset : .zero) // 整个按钮随 offset 移动
.glassEffect(.regular.interactive())
.glassEffectID("menu", in: ns)
}
// 中央控制按钮
Button {
withAnimation(.spring(duration: 2, bounce: 0.1)) { expand.toggle() }
} label: {
Image(systemName: expand ? "xmark" : "plus")
.frame(width: 44, height: 44)
.foregroundColor(.white)
}
.buttonStyle(.glass)
.glassEffect(.regular.interactive())
.glassEffectID("menu", in: ns)
}
}
.padding(30)
}
}
运行后,所有按钮仿佛从同一滴液体中“长”出来,收回时又融为一体,体验很治愈。
性能与坑点
• 务必使用 GlassEffectContainer:否则多个玻璃叠加会让 GPU 负载过高,老设备尤其明显。
• 避免滥用:苹果官方建议只给悬浮层使用玻璃效果,主内容区域不要铺满,否则既难看又耗电,像在屏幕上贴了一面镜子。
• 动画适度:interactive() 已有默认动效,叠加自定义 scale、opacity 可能导致“洋葱”式动画冲突。
Liquid Glass 不只是漂亮的滤镜,更是一整套“漂浮式”界面哲学。掌握 glassEffect、glassEffectID 和 GlassEffectContainer,就能打造出未来感十足且性能稳定的酷炫 UI。
