Spin the Wheel fortune mechanic in mobile app

TRUETECH is engaged in the development, support and maintenance of iOS, Android, PWA mobile applications. We have extensive experience and expertise in publishing mobile applications in popular markets like Google Play, App Store, Amazon, AppGallery and others.
Development and support of all types of mobile applications:
Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Showing 1 of 1 servicesAll 1735 services
Spin the Wheel fortune mechanic in mobile app
Medium
~2-3 business days
FAQ
Our competencies:
Development stages
Latest works
  • image_mobile-applications_feedme_467_0.webp
    Development of a mobile application for FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Development of a mobile application for XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Development of a mobile application for RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Development of a mobile application for ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Development of a mobile application for Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Development of a mobile application for the FLAVORS company
    445

Spin-the-Wheel (Fortune Wheel) Implementation in Mobile Apps

Fortune wheel is a gamification element with recognizable mechanics. User pulls; wheel spins, decelerates with mounting suspense, stops on prize. Simple idea, but details matter: wheel rotation physics, accuracy stopping on the right sector, visual feedback on win determine if this feels like "casino" or "broken counter."

Rotation Physics

Wheel should behave like real physical object with inertia. Not just "spin N seconds then stop"—decelerate exponentially, simulating friction.

Basic model:

// Angular velocity decreases each frame
angularVelocity *= decelerationFactor  // 0.96–0.98 for slow deceleration

// CADisplayLink updates angle each frame
currentAngle += angularVelocity * dt
wheelLayer.transform = CATransform3DMakeRotation(currentAngle, 0, 0, 1)

// Stop at minimum velocity
if abs(angularVelocity) < 0.01 { stopAndSnap() }

decelerationFactor is key. 0.99 gives long deceleration (feels heavy), 0.95 gives fast (feels light). Tune to brand feel.

Precise Stop on Target Sector

Fair randomization + accurate stop on specific sector—not contradictory. Algorithm:

  1. Determine winning sector before spin starts (server logic or client with seed)
  2. Compute target stop angle: targetAngle = sectorMidpoint + randomOffset(±halfSectorAngle)
  3. Adjust decelerationFactor so wheel completes full rotations and stops at targetAngle

Formula for decelerationFactor given initialVelocity and targetAngle:

let totalRotation = currentAngle + (Double(minFullRotations) * 2 * .pi) + targetAngle
// Solve geometric series: sum = v0 / (1 - factor)
decelerationFactor = 1 - initialVelocity / totalRotation

This hides predetermination—wheel looks random but stops where needed.

Snap Animation on Stop

Small "bounce" at end strengthens reality feel. Implement via CASpringAnimation:

let snapAnimation = CASpringAnimation(keyPath: "transform.rotation.z")
snapAnimation.fromValue = currentAngle
snapAnimation.toValue = snappedAngle
snapAnimation.stiffness = 200
snapAnimation.damping = 15
snapAnimation.initialVelocity = angularVelocity

Visual Feedback on Win

  • Haptic feedback: UINotificationFeedbackGenerator.notificationOccurred(.success) on iOS; VibrationEffect.createOneShot(100, VibrationEffect.DEFAULT_AMPLITUDE) on Android
  • Lottie confetti: separate overlay above wheel, plays after stop
  • Sector highlight: CALayer with shadowOpacity animation 0 → 1 → 0 three times (blinking)

Implementation by Platform

iOS: CADisplayLink for physics + CALayer or UIView rotation. Sectors drawn via CAShapeLayer with UIBezierPath.

Android: ValueAnimator with custom TimeInterpolator (logarithmic deceleration) + custom View with Canvas.drawArc.

Flutter: AnimationController with custom Simulation (inherit SpringSimulation or custom) + CustomPainter drawing sectors.

React Native: Animated.Value with useNativeDriver: true + react-native-svg for sector graphics, or ready package react-native-wheel-pick.

Timeline: 2–3 days includes physics, stop logic, visual feedback, and integration with server prize logic.