From 45383a1c1035a9ad2b2ebcb52056f13bc6eb4d5a Mon Sep 17 00:00:00 2001 From: Gustav Sundin Date: Thu, 19 May 2016 13:24:05 +0200 Subject: [PATCH] Enables inverted ranges (ie, 100->0 instead of 0->100) --- RangeSlider/RangeSlider.swift | 22 ++++++++-------------- RangeSlider/ViewController.swift | 8 +++++++- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/RangeSlider/RangeSlider.swift b/RangeSlider/RangeSlider.swift index 16c814f..52e1748 100755 --- a/RangeSlider/RangeSlider.swift +++ b/RangeSlider/RangeSlider.swift @@ -76,18 +76,12 @@ class RangeSliderThumbLayer: CALayer { @IBDesignable class RangeSlider: UIControl { @IBInspectable var minimumValue: Double = 0.0 { - willSet(newValue) { - assert(newValue < maximumValue, "RangeSlider: minimumValue should be lower than maximumValue") - } didSet { updateLayerFrames() } } @IBInspectable var maximumValue: Double = 1.0 { - willSet(newValue) { - assert(newValue > minimumValue, "RangeSlider: maximumValue should be greater than minimumValue") - } didSet { updateLayerFrames() } @@ -95,18 +89,12 @@ class RangeSlider: UIControl { @IBInspectable var lowerValue: Double = 0.2 { didSet { - if lowerValue < minimumValue { - lowerValue = minimumValue - } updateLayerFrames() } } @IBInspectable var upperValue: Double = 0.8 { didSet { - if upperValue > maximumValue { - upperValue = maximumValue - } updateLayerFrames() } } @@ -253,9 +241,15 @@ class RangeSlider: UIControl { // Update the values if lowerThumbLayer.highlighted { - lowerValue = boundValue(lowerValue + deltaValue, toLowerValue: minimumValue, upperValue: upperValue - gapBetweenThumbs) + // Find out if the slider is using a normal or an inverted scale, and set the bounds appropriatley + let lowerBound = minimumValue < maximumValue ? minimumValue : upperValue - gapBetweenThumbs + let upperBound = minimumValue < maximumValue ? upperValue - gapBetweenThumbs : minimumValue + lowerValue = boundValue(lowerValue + deltaValue, toLowerValue: lowerBound, upperValue: upperBound) } else if upperThumbLayer.highlighted { - upperValue = boundValue(upperValue + deltaValue, toLowerValue: lowerValue + gapBetweenThumbs, upperValue: maximumValue) + // Find out if the slider is using a normal or an inverted scale, and set the bounds appropriatley + let lowerBound = minimumValue < maximumValue ? lowerValue + gapBetweenThumbs : maximumValue + let upperBound = minimumValue < maximumValue ? maximumValue : lowerValue + gapBetweenThumbs + upperValue = boundValue(upperValue + deltaValue, toLowerValue: lowerBound, upperValue: upperBound) } sendActionsForControlEvents(.ValueChanged) diff --git a/RangeSlider/ViewController.swift b/RangeSlider/ViewController.swift index e324e86..85c3772 100755 --- a/RangeSlider/ViewController.swift +++ b/RangeSlider/ViewController.swift @@ -18,10 +18,16 @@ class ViewController: UIViewController { rangeSlider2.trackHighlightTintColor = UIColor.redColor() rangeSlider2.curvaceousness = 0.0 + // Make rangeSlider 2 use an inverted scale (100->0) + rangeSlider2.minimumValue = 100 + rangeSlider2.maximumValue = 0 + rangeSlider2.lowerValue = 100 + view.addSubview(rangeSlider1) view.addSubview(rangeSlider2) - rangeSlider1.addTarget(self, action: "rangeSliderValueChanged:", forControlEvents: .ValueChanged) + rangeSlider1.addTarget(self, action: #selector(rangeSliderValueChanged), forControlEvents: .ValueChanged) + rangeSlider2.addTarget(self, action: #selector(rangeSliderValueChanged), forControlEvents: .ValueChanged) } override func viewDidLayoutSubviews() {