Token导航 LogoToken导航TokenDH.com
研究检索需要联网github未标认证来源可访问许可证需确认审计通过

swiftui-liquid-glassSwiftUI 液态玻璃

Agent Skill

swiftui-liquid-glass 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

29,088

周安装

1,219

GitHub Stars

501

下载量

9,504
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:swiftui-liquid-glass(SwiftUI 液态玻璃)
来源仓库:https://github.com/dpearson2699/swift-ios-skills
仓库路径:skills/swiftui-liquid-glass
安装命令:
npx skills add https://github.com/dpearson2699/swift-ios-skills --skill swiftui-liquid-glass
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/dpearson2699/swift-ios-skills --skill swiftui-liquid-glass

简介

适用于 iOS 26+ 的 SwiftUI 液体玻璃效果,具有交互式玻璃容器、变形过渡和按钮样式。

  • 提供.glassEffect()
  • 用于将半透明液体玻璃材质应用于自定义视图的修改器,支持着色、交互性和自定义形状
  • 包括 GlassEffectContainer
  • 用于分组和混合多个玻璃元素,以及 glassEffectID
  • 和玻璃效果联盟
  • 用于在视图层次结构更改期间变形动画
  • 提供预建按钮样式(.glass, .glass突出)、滚动边缘效果和 ToolbarSpacer 等工具栏实用程序
  • 适用于 iOS 26 设计模式
  • 需要使用 if #available(iOS 26, *) 进行可用性门控
  • 以及早期版本的后备 UI;强调正确的修饰符排序并避免过度使用玻璃效果

SKILL.md

SwiftUI Liquid Glass

Liquid Glass is the dynamic translucent material introduced in iOS 26 (and iPadOS 26, macOS 26, tvOS 26, watchOS 26). It blurs content behind it, reflects surrounding color and light, and reacts to touch and pointer interactions. Standard SwiftUI components (tab bars, toolbars, navigation bars, sheets) adopt Liquid Glass automatically when built with the iOS 26 SDK. Use the APIs below for custom views and controls.

See references/liquid-glass.md for the full API reference with additional examples.

Contents

Workflow

Choose the path that matches the request:

1. Implement a new feature with Liquid Glass

  1. Identify target surfaces (cards, chips, floating controls, custom bars).
  2. Decide shape, prominence, and whether each element needs interactivity.
  3. Wrap grouped glass elements in a GlassEffectContainer.
  4. Apply .glassEffect() after layout and appearance modifiers.
  5. Add .interactive() only to tappable/focusable elements.
  6. Add morphing transitions with glassEffectID(_:in:) where the view hierarchy changes with animation.
  7. Gate with if #available(iOS 26, *) and provide a fallback for earlier versions.

2. Improve an existing feature with Liquid Glass

  1. Find custom blur/material backgrounds that can be replaced with .glassEffect().
  2. Wrap sibling glass elements in GlassEffectContainer for blending and performance.
  3. Replace custom glass-like buttons with .buttonStyle(.glass) or .buttonStyle(.glassProminent).
  4. Add morphing transitions where animated insertion/removal occurs.

3. Review existing Liquid Glass usage

Run through the Review Checklist below and verify each item.

Core API Summary

glassEffect(_:in:)

Applies Liquid Glass behind a view. Default: .regular variant in a Capsule shape.

nonisolated func glassEffect(
    _ glass: Glass = .regular,
    in shape: some Shape = DefaultGlassEffectShape()
) -> some View

Glass struct

Property / MethodPurpose
.regularStandard glass material
.clearClear variant (minimal tint)
.identityNo visual effect (pass-through)
.tint(_:)Add a color tint for prominence
.interactive(_:)React to touch and pointer interactions

Chain them: .regular.tint(.blue).interactive()

GlassEffectContainer

Wraps multiple glass views for shared rendering, blending, and morphing.

GlassEffectContainer(spacing: 24) {
    // child views with .glassEffect()
}

The spacing controls when nearby glass shapes begin to blend. Match or exceed the interior layout spacing so shapes merge during animated transitions but remain separate at rest.

Morphing & Transitions

ModifierPurpose
glassEffectID(_:in:)Stable identity for morphing during view hierarchy changes
glassEffectUnion(id:namespace:)Merge multiple views into one glass shape
glassEffectTransition(_:)Control how glass appears/disappears

Transition types: .matchedGeometry (default when within spacing), .materialize (fade content + animate glass in/out), .identity (no transition).

Button Styles

Button("Action") { }
    .buttonStyle(.glass)           // standard glass button

Button("Primary") { }
    .buttonStyle(.glassProminent)  // prominent glass button

Scroll Edge Effects and Background Extension (iOS 26+)

These complement Liquid Glass when building custom toolbars and scroll views:

ScrollView {
    content
}
.scrollEdgeEffectStyle(.soft, for: .top)  // Configures edge effect at scroll boundaries

// Duplicate view into mirrored copies at safe area edges with blur (e.g., under sidebars)
content
    .backgroundExtensionEffect()

ToolbarSpacer (iOS 26+)

Creates a visual break between items in toolbars:

.toolbar {
    ToolbarItem { Button("Edit") { } }
    ToolbarSpacer(.fixed)
    ToolbarItem { Button("Share") { } }
}

Code Examples

Basic glass effect with availability gate

if #available(iOS 26, *) {
    Text("Status")
        .padding()
        .glassEffect(.regular.interactive(), in: .rect(cornerRadius: 16))
} else {
    Text("Status")
        .padding()
        .background(.ultraThinMaterial, in: RoundedRectangle(cornerRadius: 16))
}

Grouped glass elements in a container

GlassEffectContainer(spacing: 24) {
    HStack(spacing: 24) {
        ForEach(tools) { tool in
            Image(systemName: tool.icon)
                .frame(width: 56, height: 56)
                .glassEffect(.regular.interactive())
        }
    }
}

Morphing transition

@State private var isExpanded = false
@Namespace private var ns

var body: some View {
    GlassEffectContainer(spacing: 40) {
        HStack(spacing: 40) {
            Image(systemName: "pencil")
                .frame(width: 80, height: 80)
                .glassEffect()
                .glassEffectID("pencil", in: ns)

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

    Button("Toggle") {
        withAnimation { isExpanded.toggle() }
    }
    .buttonStyle(.glass)
}

Unioning views into a single glass shape

@Namespace private var ns

GlassEffectContainer(spacing: 20) {
    HStack(spacing: 20) {
        ForEach(items.indices, id: \.self) { i in
            Image(systemName: items[i])
                .frame(width: 80, height: 80)
                .glassEffect()
                .glassEffectUnion(id: i < 2 ? "group1" : "group2", namespace: ns)
        }
    }
}

Tinted glass badge

struct GlassBadge: View {
    let icon: String
    let tint: Color

    var body: some View {
        Image(systemName: icon)
            .font(.title2)
            .padding()
            .glassEffect(.regular.tint(tint), in: .rect(cornerRadius: 12))
    }
}

Common Mistakes

DON'T: Apply Liquid Glass to every surface

Overuse distracts from content. Glass should emphasize key interactive elements, not decorate everything.

// WRONG: Glass on everything
VStack {
    Text("Title").glassEffect()
    Text("Subtitle").glassEffect()
    Divider().glassEffect()
    Text("Body").glassEffect()
}

// CORRECT: Glass on primary interactive elements only
VStack {
    Text("Title").font(.title)
    Text("Subtitle").font(.subheadline)
    Divider()
    Text("Body")
}
.padding()
.glassEffect()

DON'T: Nest GlassEffectContainer inside another

Nested containers cause undefined rendering behavior.

// WRONG
GlassEffectContainer {
    GlassEffectContainer {
        content.glassEffect()
    }
}

// CORRECT: Single container wrapping all glass views
GlassEffectContainer {
    content.glassEffect()
}

DON'T: Add.interactive() to non-interactive elements

.interactive() adds visual affordance suggesting tappability. Using it on decorative glass misleads users.

DON'T: Apply.glassEffect() before layout modifiers

Glass calculates its shape from the final frame. Applying it before padding/frame produces incorrect bounds.

// WRONG: Glass applied before padding
Text("Label").glassEffect().padding()

// CORRECT: Glass applied after layout
Text("Label").padding().glassEffect()

DON'T: Forget accessibility testing

Always test with Reduce Transparency and Reduce Motion enabled. Glass degrades gracefully but verify content remains readable.

DON'T: Skip availability checks

Liquid Glass requires iOS 26+. Gate with if #available(iOS 26, *) and provide a fallback.

Review Checklist

  • Availability: if #available(iOS 26, *) present with fallback UI.
  • Container: Multiple glass views wrapped in GlassEffectContainer.
  • Modifier order: .glassEffect() applied after layout/appearance modifiers.
  • Interactivity: .interactive() used only where user interaction exists.
  • Transitions: glassEffectID used with @Namespace for morphing animations.
  • Transition type: .matchedGeometry for nearby effects; .materialize for distant ones.
  • Consistency: Shapes, tints, and spacing are uniform across related elements.
  • Performance: Glass effects are limited in number; container used for grouping.
  • Accessibility: Tested with Reduce Transparency and Reduce Motion enabled.
  • Button styles: Standard .glass / .glassProminent used for buttons.
  • Ensure types driving Liquid Glass effects are Sendable; apply glass effects on @MainActor context

References

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

35.56%
按下载量换算3,380

Claude

29.09%
按下载量换算2,765

Cursor

18.26%
按下载量换算1,735

Gemini CLI

8.52%
按下载量换算810

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills