<!--
{
  "availability" : [
    "watchOS: 9.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "SwiftUI",
  "identifier" : "/documentation/SwiftUI/View/digitalCrownRotation(_:from:through:sensitivity:isContinuous:isHapticFeedbackEnabled:onChange:onIdle:)",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "SwiftUI"
    ],
    "preciseIdentifier" : "s:7SwiftUI4ViewPAAE20digitalCrownRotation_4from7through11sensitivity12isContinuous0J21HapticFeedbackEnabled8onChange0O4IdleQrAA7BindingVyqd__G_qd__qd__AA07DigitalE21RotationalSensitivityOS2byAA0sE5EventVcyyctSBRd__lF"
  },
  "title" : "digitalCrownRotation(_:from:through:sensitivity:isContinuous:isHapticFeedbackEnabled:onChange:onIdle:)"
}
-->

# digitalCrownRotation(_:from:through:sensitivity:isContinuous:isHapticFeedbackEnabled:onChange:onIdle:)

Tracks Digital Crown rotations by updating the specified binding.

```
nonisolated func digitalCrownRotation<V>(_ binding: Binding<V>, from minValue: V, through maxValue: V, sensitivity: DigitalCrownRotationalSensitivity = .high, isContinuous: Bool = false, isHapticFeedbackEnabled: Bool = true, onChange: @escaping (DigitalCrownEvent) -> Void = { _ in }, onIdle: @escaping () -> Void = { }) -> some View where V : BinaryFloatingPoint
```

## Parameters

`binding`

A binding to a value that updates when the user rotates
the  Digital Crown.

`minValue`

Lower end of the range reported.

`maxValue`

Upper end of the range reported.

`sensitivity`

How much the user needs to rotate the  Digital Crown
to move between two integer numbers.

`isContinuous`

Controls if the value reported stops at `minValue`
and `maxValue`, or if it should wrap around. Default is `false`.

`isHapticFeedbackEnabled`

Controls the generation of haptic feedback
when turning the Digital Crown. Default is `true`.

`onChange`

A block that is called as the Digital Crown is rotated.

`onIdle`

A block that is called when the Digital Crown has settled to
an idle state.

## Discussion

Use this method to receive continuous values on a binding you provides
as the user turns the Digital Crown on Apple Watch. The example below
receives changes to the binding value, starting at the `minValue` of
`0.0`  up to the `maxValue` of `10.0` settling in to multiples of `0.1`
increasing or decreasing depending on the direction that the user turns
the Digital Crown, rolling over if the user exceeds the specified
boundary values:

```
struct DigitalCrown: View {
    @State private var crownValue = 0.0
    @State private var minValue = 0.0
    @State private var maxValue = 10.0
    @State private var velocity = 0.0
    @State private var isIdle = true

    var body: some View {
        Text("Received Value:\(crownValue, specifier: "%.2f")")
            .focusable()
            .digitalCrownRotation($crownValue,
                                  from: minValue,
                                  through: maxValue,
                                  sensitivity: .low,
                                  isContinuous: true
            ) { crownEvent in
                isIdle = false
                velocity = crownEvent.velocity
            } onIdle: {
                isIdle = true
            }
    }
}
```

![A screenshot showing a value received by turning the Digital Crown](images/com.apple.SwiftUI/SwiftUI-View-digitalCrownRotationBindingFull@2x.png)

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)