FlywheelControl
Inspired by analog dials and vintage scrub wheels, FlywheelControl brings momentum and finesse to modern SwiftUI interfaces. It’s not just a control—it’s an interface philosophy for designers and developers building next-gen touch experiences.
FlywheelControl is a SwiftUI-based, physics-inspired radial scroller — ideal for zoom, scrub, and value selection.
Built in under a week using AI-enhanced prototyping, it demonstrates how custom controls can evolve beyond sliders and steppers to offer tactile, analog-style experiences.
🌟 Highlights
- Momentum-based interaction using CoreGraphics and SwiftUI
- Fully customizable for knob, wheel, and timeline UX
- Integrated into myPromenade for immersive spatial browsing
- Available as a Swift Package:
- Recommended version for Playgrounds exploration: FlywheelControl 1.2.7+
- Designed to delight users in both performance and feel—used in spatial shopping and artistic exploration apps
🧪 Explore FlywheelControl on iPad (No Xcode Required)
FlywheelControl is intentionally packaged to be explorable. You can try the control in under a minute using Swift Playgrounds on iPad — a lightweight “front door” for SDK discovery, before integrating it into a real app.
- Install/open Swift Playgrounds on iPad and create a new App (SwiftUI template).
- Add the package: Add Package → paste:
https://github.com/aweiner42/FlywheelControl - Recommended version for Playgrounds exploration: FlywheelControl 1.2.7+
- No asset setup required — the demo ruler image is bundled with the Swift package.
- Paste the minimal demo into
ContentView.swiftand run.
import SwiftUI
import FlywheelControl
struct ContentView: View {
@State private var value: Double = 0
@State private var maxValue: Double = 150
@State private var minValue: Double = 0
@State private var spanCM: Double = 20
var body: some View {
VStack(spacing: 40) {
Text("Value: \\(value, specifier: \\"%.2f\\") cm")
.font(.headline)
FlywheelControl(
trackImage: FlywheelControlResources.bundledRulerImage(),
position: $value,
maxOffset: $maxValue,
minOffset: $minValue,
spanCM: $spanCM
)
.frame(width: 60, height: 240)
}
.padding()
}
}
Notes:
• Swift Playgrounds on iPad is the recommended exploration environment and demonstrates momentum behavior reliably.
• Swift Playgrounds on macOS may occasionally require restarting the preview if input becomes unresponsive.
• Haptics are only available on supported iPhone hardware.
Built by Alan Weiner
Senior iOS Architect · Spatial UX Advocate
Founder, SIME Corp