@@ -23,19 +23,23 @@ struct RangeSlider: View {
2323 ZStack {
2424 RangeSliderFilledTrack ( )
2525 . frame ( width: geometry. size. width * ( upperValue - lowerValue) )
26- . position ( CGPoint ( x: ( upperValue + lowerValue) / 2 * geometry. size. width, y: 2.0 ) )
26+ . position ( CGPoint ( x: ( upperValue + lowerValue) / 2 * ( geometry. size. width - 2 * RangeSliderHandle . size ) + RangeSliderHandle . size , y: 2.0 ) )
2727 RangeSliderHandle ( )
28- . position ( CGPoint ( x: RangeSliderHandle . size / 2 + lowerValue * geometry. size. width, y: 2.0 ) )
28+ . position ( CGPoint ( x: RangeSliderHandle . size / 2 + lowerValue * ( geometry. size. width - 2 * RangeSliderHandle . size ) , y: 2.0 ) )
2929 . gesture (
3030 DragGesture ( minimumDistance: 0 )
3131 . onChanged { value in
32+ let x = RangeSliderHandle . size
3233 updating = true
33- let delta = value. translation. width / geometry. size. width
34- lowerValue = min ( max ( lowerLast + delta, 0 ) , upperLast)
34+ // let delta = value.translation.width / geometry.size.width
35+ // lowerValue = min(max(lowerLast + delta, 0), upperLast)
36+ lowerValue = min ( max ( lowerLast + value. translation. width / ( geometry. size. width - 2 * x) , 0 ) , upperLast)
3537 }
3638 . onEnded { value in
37- let delta = value. translation. width / geometry. size. width
38- lowerValue = min ( max ( lowerLast + delta, 0 ) , upperLast)
39+ // let delta = value.translation.width / geometry.size.width
40+ // lowerValue = min(max(lowerLast + delta, 0), upperLast)
41+ let x = RangeSliderHandle . size
42+ lowerValue = min ( max ( lowerLast + value. translation. width / ( geometry. size. width - 2 * x) , 0 ) , upperLast)
3943 lowerLast = lowerValue
4044 updating = false
4145 }
@@ -47,17 +51,24 @@ struct RangeSlider: View {
4751 }
4852
4953 RangeSliderHandle ( )
50- . position ( CGPoint ( x: - ( RangeSliderHandle . size / 2 ) + upperValue * geometry. size. width, y: 2.0 ) )
54+ . position ( CGPoint ( x: 3.0 * RangeSliderHandle. size / 2.0 + upperValue * ( geometry. size. width - 2 * RangeSliderHandle . size ) , y: 2.0 ) )
5155 . gesture (
5256 DragGesture ( minimumDistance: 0 )
5357 . onChanged { value in
5458 updating = true
55- let delta = value. translation. width / geometry. size. width
56- upperValue = min ( max ( upperLast + delta, lowerLast) , 1 )
59+ // let delta = value.translation.width / geometry.size.width
60+ // upperValue = min(max(upperLast + delta, lowerLast), 1)
61+
62+ let x = RangeSliderHandle . size
63+ upperValue = min ( max ( upperLast + value. translation. width / ( geometry. size. width - 2 * x) , lowerLast) , 1 )
5764 }
5865 . onEnded { value in
59- let delta = value. translation. width / geometry. size. width
60- upperValue = min ( max ( upperLast + delta, lowerLast) , 1 )
66+ // let delta = value.translation.width / geometry.size.width
67+ // upperValue = min(max(upperLast + delta, lowerLast), 1)
68+
69+ let x = RangeSliderHandle . size
70+ upperValue = min ( max ( upperLast + value. translation. width / ( geometry. size. width - 2 * x) , lowerLast) , 1 )
71+
6172 upperLast = upperValue
6273 updating = false
6374 }
0 commit comments