Skip to content

Liquid Glass Design Skill 是 Everything Claude Code 针对 iOS 26 全新 Liquid Glass 动态玻璃材质的系统级实现方案,覆盖 SwiftUI、UIKit 与 WidgetKit。它解决了传统模糊/毛玻璃效果难以实现动态融合、交互反馈和高性能渲染的问题,提供多元素融合、流畅形变、交互响应和可访问性最佳实践,助力开发者快速构建 iOS 26 风格的现代 UI。本文将详解 Skill 的激活场景、完整使用流程、常见输出、与其他 Agent/Skill 的协作方式及注意事项。

Everything Claude Code Liquid Glass Design Skill:iOS 26 动态玻璃材质、反射与交互形变 SwiftUI 实现

iOS 26 引入了全新的 Liquid Glass 设计语言,带来了动态模糊、环境反射和交互形变等视觉体验。对于希望快速适配 iOS 26 风格的开发者而言,Liquid Glass Design Skill 提供了一套系统化的 SwiftUI/ UIKit/ WidgetKit 实现范式,极大简化了复杂玻璃材质的开发难题。

本指南将结合生产实战经验,详细讲解如何用好 Liquid Glass Design Skill,提升你的 AI 辅助开发效率和 UI 质量。更多 Claude Code Skills 体系与自动化 Hook 的整体介绍,推荐阅读 Everything Claude Code 完全指南Claude Code 快速上手指南


1. 这个 Skill 能解决什么问题?

传统做法的痛点:

  • 旧版毛玻璃(UIBlurEffect/Material)仅支持静态模糊,难以动态融合、响应交互。
  • 多个独立玻璃视图无法平滑合并,性能瓶颈明显。
  • 交互反馈、色彩反射和形变动画需大量手写代码,难以维护。
  • WidgetKit、SwiftUI、UIKit 三套体系体验割裂,API 不统一。

Liquid Glass Design Skill 的优势:

  • 一行代码即可为任意 SwiftUI 视图添加动态玻璃材质(含模糊、反射、交互形变)。
  • 提供 GlassEffectContainer/ UIGlassContainerEffect,支持多元素融合、流畅 morphing 动画。
  • 支持 .interactive() 交互反馈、.tint() 色彩强调、.glassEffectUnion 分组融合等高级特性。
  • 完美兼容 WidgetKit 的渲染模式与可访问性,适配 iOS 26 全新系统风格。

2. 什么时候会自动激活/推荐使用?

  • 新建或升级 iOS 26+ 应用,采用 Liquid Glass 视觉语言。
  • 需要实现玻璃风格的按钮、卡片、工具栏、浮动容器等 UI。
  • 多个玻璃元素需要融合、形变(如卡片展开/收起、动态分组)。
  • Widget 需要与系统玻璃风格无缝融合,适配浅色/深色/高亮模式。
  • 迁移旧有 blur/material 代码到 iOS 26 Liquid Glass API。

3. 实际项目中的完整使用流程(Step by Step)

Step 1:为单个视图添加 Liquid Glass 效果

最简单的用法,只需一行:

swift
Text("Hello, World!")
    .font(.title)
    .padding()
    .glassEffect()  // 默认 regular,胶囊形状

效果:自动获得动态模糊、环境色彩反射和玻璃高光。


Step 2:自定义形状、色彩和交互反馈

swift
Text("Hello, World!")
    .font(.title)
    .padding()
    .glassEffect(.regular.tint(.orange).interactive(), in: .rect(cornerRadius: 16.0))
  • .regular:标准玻璃风格
  • .tint(.orange):高亮色彩强调
  • .interactive():支持触摸/指针交互反馈
  • .rect(cornerRadius: 16.0):自定义圆角矩形形状

Step 3:为按钮/卡片等控件批量应用玻璃风格

swift
Button("点击我") { /* action */ }
    .buttonStyle(.glass)

Button("重要操作") { /* action */ }
    .buttonStyle(.glassProminent)
  • .glassProminent 适用于主操作,强调视觉层级。

Step 4:多元素融合与性能优化

多个玻璃元素需用 GlassEffectContainer 包裹,才能实现形变融合与高性能渲染:

swift
GlassEffectContainer(spacing: 40.0) {
    HStack(spacing: 40.0) {
        Image(systemName: "scribble.variable")
            .frame(width: 80, height: 80)
            .glassEffect()
        Image(systemName: "eraser.fill")
            .frame(width: 80, height: 80)
            .glassEffect()
    }
}
  • spacing 控制融合距离,越近越容易合并为一个玻璃形状。

Step 5:分组融合与动态形变(Morphing)

1. 多组玻璃元素融合

swift
@Namespace private var namespace

GlassEffectContainer(spacing: 20.0) {
    HStack(spacing: 20.0) {
        ForEach(symbolSet.indices, id: \.self) { item in
            Image(systemName: symbolSet[item])
                .frame(width: 80, height: 80)
                .glassEffect()
                .glassEffectUnion(id: item < 2 ? "group1" : "group2", namespace: namespace)
        }
    }
}
  • glassEffectUnion 可将不同分组的元素融合为独立玻璃形状。

2. 动态形变过渡动画

swift
@State private var isExpanded = false
@Namespace private var namespace

GlassEffectContainer(spacing: 40.0) {
    HStack(spacing: 40.0) {
        Image(systemName: "scribble.variable")
            .frame(width: 80, height: 80)
            .glassEffect()
            .glassEffectID("pencil", in: namespace)

        if isExpanded {
            Image(systemName: "eraser.fill")
                .frame(width: 80, height: 80)
                .glassEffect()
                .glassEffectID("eraser", in: namespace)
        }
    }
}

Button("切换") {
    withAnimation { isExpanded.toggle() }
}
.buttonStyle(.glass)
  • 利用 @NamespaceglassEffectID,实现玻璃元素的平滑合并/拆分动画。

Step 6:UIKit 与 WidgetKit 场景

UIKit 用法

swift
let glassEffect = UIGlassEffect()
glassEffect.tintColor = UIColor.systemBlue.withAlphaComponent(0.3)
glassEffect.isInteractive = true

let visualEffectView = UIVisualEffectView(effect: glassEffect)
visualEffectView.layer.cornerRadius = 20
visualEffectView.clipsToBounds = true
  • 多元素融合用 UIGlassContainerEffect

WidgetKit 用法

swift
struct MyWidgetView: View {
    @Environment(\.widgetRenderingMode) var renderingMode

    var body: some View {
        if renderingMode == .accented {
            // 高亮玻璃背景
        } else {
            // 普通模式
        }
    }
}
  • 支持 .widgetAccentable() 分组强调,.widgetAccentedRenderingMode(.monochrome) 控制图片渲染。

4. 输出示例

典型输出(SwiftUI 代码):

swift
GlassEffectContainer(spacing: 32) {
    VStack(spacing: 24) {
        Text("主标题")
            .font(.largeTitle)
            .glassEffect(.regular.tint(.purple).interactive(), in: .rect(cornerRadius: 20))
        HStack(spacing: 16) {
            Button("操作1") { ... }
                .buttonStyle(.glass)
            Button("操作2") { ... }
                .buttonStyle(.glassProminent)
        }
    }
}

预期效果:

  • 主标题和按钮均为动态玻璃材质,支持交互反馈。
  • 多按钮自动融合为一体,动画流畅。
  • 兼容深色/浅色/高亮模式,性能优异。

5. 常见配套 Agent 与 Skill 协作


6. 最佳实践与注意事项

  • 多元素务必用 GlassEffectContainer 包裹,否则无法融合和形变,且性能下降。
  • .glassEffect() 应在 frame/font/padding 等修饰符之后调用。
  • .interactive() 只用于可交互元素,避免无意义的反馈动画。
  • WidgetKit 场景下,务必检测 renderingMode,保证高亮模式下视觉一致。
  • UIKit 下有圆角时,必须 clipsToBounds = true,否则玻璃溢出。
  • 不要滥用玻璃材质,优先用于主操作、卡片、工具栏等核心区域。

FAQ

Q: 旧项目如何平滑迁移到 Liquid Glass Design Skill?
A: 直接用 .glassEffect() 替换原有的 blur/material 修饰符,并根据需要引入 GlassEffectContainer 和相关参数,绝大多数代码可无缝迁移。

Q: 多个玻璃元素为何必须用 GlassEffectContainer?
A: 只有容器包裹时,系统才能高效合并渲染区域,实现流畅的形变动画和性能优化,避免视觉割裂和卡顿。

Q: 如何保证玻璃上的文本可读性?
A: 建议配合 .tint() 提高对比度,并在深色/高亮模式下多端测试,必要时调整字体颜色或加阴影,确保可访问性达标。