Task | SwiftUI | AppKit |
---|---|---|
Apply glass | .glassEffect() | NSGlassEffectView() |
Set shape | .glassEffect(in: .rect(cornerRadius: 16)) | glass.cornerRadius = 16 |
Add tint | .glassEffect(.regular.tint(.blue)) | glass.tintColor = NSColor.blue |
Make interactive | .glassEffect(.regular.interactive()) | Custom mouse tracking |
Container | GlassEffectContainer { } | NSGlassEffectContainerView() |
Button style | .buttonStyle(.glass) | Custom GlassButton class |
Morphing | .glassEffectID("id", in: namespace) | Manual animation |
Task | SwiftUI Code |
---|---|
Customizable toolbar | .toolbar(id: "main") { } |
Add item | ToolbarItem(id: "save") { } |
Add spacer | ToolbarSpacer(.flexible) |
Minimize search | .searchToolbarBehavior(.minimize) |
Reposition system item | DefaultToolbarItem(kind: .search, placement: .bottomBar) |
Transition source | .matchedTransitionSource(id: "btn", in: namespace) |
Scenario | Recommendation | Max Count |
---|---|---|
Static UI | Individual glass effects | 5-10 |
Dynamic lists | Container + lazy loading | 20-30 |
Animations | Disable during transitions | N/A |
Scrolling | Disable glass when scrolling | N/A |
Button("Click").buttonStyle(.glass)
.glassEffect(.regular.tint(condition ? .blue : .clear))
NSAnimationContext
with animator().tintColor
GlassEffectContainer(spacing: 40)
NSGlassEffectContainerView
with spacing.toolbar(id: "main")
with ToolbarItem(id: "item")
Feature | iOS/iPadOS | macOS | visionOS |
---|---|---|---|
Liquid Glass | 17.0+ | 14.0+ | 1.0+ |
Customizable Toolbars | 17.0+ | 14.0+ | N/A |
Glass Button Style | 17.0+ | 14.0+ | 1.0+ |
Matched Transitions | 17.0+ | 14.0+ | 1.0+ |