A language-learning home with a streak, today's goals as color blocks and a floating tab bar whose lens follows your finger.
The home tab of a language-learning app: a greeting and level, a week streak, today's goals stacked as solid color blocks with durations, and a start-lesson action, on a floating glass tab bar whose lens follows the finger, stretches toward it and snaps with a spring. The bar hides on scroll and ships as `LensTabBar` for your own apps.
$199 once, every piece included. See how installing works · Sign in
SwiftUI source you own, built on Apple frameworks only.
App Shell (screen)
How it behaves, what it handles, and the decisions behind it.
Tap or drag across the bar. While dragging, every tab collapses to its icon and the lens stretches toward the finger, switching selection with a haptic as it crosses each tab; on release it snaps onto the nearest tab and the selected label expands back in. Reselecting the current tab pulses the lens and calls onReselect, and scrollProgress slides the bar below the screen edge so a shell can hide it on scroll. Glass on iOS 26, Material below.
scrollProgress at 1, removed from VoiceOver).onGeometryChange in the bar's named coordinate space; the lens is drawn from those frames, so it needs no matchedGeometryEffect.DragGesture(minimumDistance: 0): a release without movement is a tap, movement is a drag. Tabs still expose .isButton/.isSelected traits and an accessibility action, and the container carries .isTabBar..symbolEffect(.bounce) fires only on the tab being selected (per-tab counter), never on the one being left. Reduce Motion replaces springs with short ease-outs and skips the bounce and pulse.VStack spacing and rising zIndex, so each overlaps the one above. At accessibility sizes the overlap drops to zero. Goals toggle done on tap.tile(0) lens and its ink, exactly as TabShellScreen passes it.LensTabBarExample at the end of LensTabBar.swift is the Lessons screen from the preview.Pieces that work well next to this one.