SIME Corp
Sumner Internet Marketing Environments • Spatial Interfaces • AI • Mobile Architecture

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 Logo
Custom SwiftUI Component: FlywheelControl

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.

  1. Install/open Swift Playgrounds on iPad and create a new App (SwiftUI template).
  2. Add the package: Add Package → paste: https://github.com/aweiner42/FlywheelControl
  3. Recommended version for Playgrounds exploration: FlywheelControl 1.2.7+
  4. No asset setup required — the demo ruler image is bundled with the Swift package.
  5. Paste the minimal demo into ContentView.swift and 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