@@ -12,6 +12,7 @@ struct RangeSlider: View {
1212 @Binding var upperValue : Double
1313 @State private var lowerLast : Double = 0.0
1414 @State private var upperLast : Double = 1.0
15+ @State private var updating : Bool = false
1516
1617 var body : some View {
1718 RoundedRectangle ( cornerRadius: 4 )
@@ -28,31 +29,44 @@ struct RangeSlider: View {
2829 . gesture (
2930 DragGesture ( minimumDistance: 0 )
3031 . onChanged { value in
32+ updating = true
3133 let delta = value. translation. width / geometry. size. width
3234 lowerValue = min ( max ( lowerLast + delta, 0 ) , upperLast)
3335 }
3436 . onEnded { value in
3537 let delta = value. translation. width / geometry. size. width
3638 lowerValue = min ( max ( lowerLast + delta, 0 ) , upperLast)
3739 lowerLast = lowerValue
40+ updating = false
3841 }
3942 )
43+ . onChange ( of: lowerValue) { _, newValue in
44+ if !updating {
45+ lowerLast = newValue
46+ }
47+ }
4048
4149 RangeSliderHandle ( )
4250 . position ( CGPoint ( x: upperValue * geometry. size. width, y: 2.0 ) )
4351 . gesture (
4452 DragGesture ( minimumDistance: 0 )
4553 . onChanged { value in
54+ updating = true
4655 let delta = value. translation. width / geometry. size. width
4756 upperValue = min ( max ( upperLast + delta, lowerLast) , 1 )
48-
4957 }
5058 . onEnded { value in
5159 let delta = value. translation. width / geometry. size. width
5260 upperValue = min ( max ( upperLast + delta, lowerLast) , 1 )
5361 upperLast = upperValue
62+ updating = false
5463 }
5564 )
65+ . onChange ( of: upperValue) { _, newValue in
66+ if !updating {
67+ upperLast = newValue
68+ }
69+ }
5670 }
5771 }
5872 }
0 commit comments