From fe784cef02e31b274a9f5e9bc04ea087cfcc555d Mon Sep 17 00:00:00 2001 From: Varun Naharia Date: Wed, 25 Nov 2020 17:41:01 +0530 Subject: [PATCH] added sticky functionality --- RangeSlider/Base.lproj/Main.storyboard | 38 +++++++++++++++++--------- RangeSlider/RangeSlider.swift | 11 ++++++++ RangeSlider/ViewController.swift | 15 ++++++---- 3 files changed, 46 insertions(+), 18 deletions(-) diff --git a/RangeSlider/Base.lproj/Main.storyboard b/RangeSlider/Base.lproj/Main.storyboard index aec45d2..9b7fe63 100644 --- a/RangeSlider/Base.lproj/Main.storyboard +++ b/RangeSlider/Base.lproj/Main.storyboard @@ -1,10 +1,9 @@ - - - - + + - + + @@ -20,6 +19,23 @@ + + + + + + + + + + + + + + + + + @@ -54,21 +70,17 @@ - - - - - - - - + + + + diff --git a/RangeSlider/RangeSlider.swift b/RangeSlider/RangeSlider.swift index ccaa0f2..cd530c6 100755 --- a/RangeSlider/RangeSlider.swift +++ b/RangeSlider/RangeSlider.swift @@ -122,6 +122,8 @@ public class RangeSlider: UIControl { } } + @IBInspectable public var sticky: Bool = false + var gapBetweenThumbs: Double { return 0.5 * Double(thumbWidth) * (maximumValue - minimumValue) / Double(bounds.width) } @@ -277,8 +279,17 @@ public class RangeSlider: UIControl { // Update the values if lowerThumbLayer.highlighted { lowerValue = boundValue(lowerValue + deltaValue, toLowerValue: minimumValue, upperValue: upperValue - gapBetweenThumbs) + if(self.sticky) + { + upperValue = boundValue(upperValue + deltaValue, toLowerValue: lowerValue - gapBetweenThumbs, upperValue: maximumValue) + } + } else if upperThumbLayer.highlighted { upperValue = boundValue(upperValue + deltaValue, toLowerValue: lowerValue + gapBetweenThumbs, upperValue: maximumValue) + if(self.sticky) + { + lowerValue = boundValue(lowerValue + deltaValue, toLowerValue: minimumValue, upperValue: upperValue + gapBetweenThumbs) + } } sendActions(for: .valueChanged) diff --git a/RangeSlider/ViewController.swift b/RangeSlider/ViewController.swift index cfddd02..6cb3fb9 100755 --- a/RangeSlider/ViewController.swift +++ b/RangeSlider/ViewController.swift @@ -11,17 +11,20 @@ import UIKit class ViewController: UIViewController { let rangeSlider1 = RangeSlider(frame: CGRect.zero) let rangeSlider2 = RangeSlider(frame: CGRect.zero) + let rangeSlider3 = RangeSlider(frame: CGRect.zero) override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. - rangeSlider2.trackHighlightTintColor = UIColor.red - rangeSlider2.curvaceousness = 0.0 - + rangeSlider3.trackHighlightTintColor = UIColor.red + rangeSlider3.curvaceousness = 0.0 + rangeSlider2.sticky = true view.addSubview(rangeSlider1) view.addSubview(rangeSlider2) + view.addSubview(rangeSlider3) rangeSlider1.addTarget(self, action: #selector(ViewController.rangeSliderValueChanged(_:)), for: .valueChanged) + rangeSlider2.addTarget(self, action: #selector(ViewController.rangeSliderValueChanged(_:)), for: .valueChanged) } override func viewDidLayoutSubviews() { @@ -29,8 +32,10 @@ class ViewController: UIViewController { let width = view.bounds.width - 2.0 * margin rangeSlider1.frame = CGRect(x: margin, y: margin + topLayoutGuide.length + 100, width: width, height: 31.0) - rangeSlider2.frame = CGRect(x: margin + 20, y: 5 * margin + topLayoutGuide.length + 100, - width: width - 40, height: 40) + rangeSlider2.frame = CGRect(x: margin, y: 5 * margin + topLayoutGuide.length + 100, + width: width, height: 31.0) + rangeSlider3.frame = CGRect(x: margin + 20, y: 10 * margin + topLayoutGuide.length + 100, + width: width - 40, height: 40) } override func didReceiveMemoryWarning() {