From 4ec2bb605eeb45fcea0770c5478e2a6107412605 Mon Sep 17 00:00:00 2001 From: Ricardo Pramana Suranta Date: Thu, 23 Jun 2016 17:44:30 +0700 Subject: [PATCH 1/7] Make sliderLineBetweenHandles' cornerRadius set to half of its lineHeight There are cases where the disableRange is YES and selectedMinimum is 0, causing the edge of the handle not rounded. This commit is added to fix that. --- Pod/Classes/TTRangeSlider.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Pod/Classes/TTRangeSlider.m b/Pod/Classes/TTRangeSlider.m index fe7b76e..ddb7f32 100644 --- a/Pod/Classes/TTRangeSlider.m +++ b/Pod/Classes/TTRangeSlider.m @@ -121,7 +121,8 @@ - (void)layoutSubviews { self.sliderLine.frame = CGRectMake(lineLeftSide.x, lineLeftSide.y, lineRightSide.x-lineLeftSide.x, self.lineHeight); self.sliderLine.cornerRadius = self.lineHeight / 2.0; - + self.sliderLineBetweenHandles.cornerRadius = self.lineHeight / 2.0; + [self updateLabelValues]; [self updateHandlePositions]; [self updateLabelPositions]; From 6a1028ca05f9fec61b1ce6c5ea4ddc576174f1f7 Mon Sep 17 00:00:00 2001 From: Ricardo Pramana Suranta Date: Thu, 23 Jun 2016 18:10:59 +0700 Subject: [PATCH 2/7] Add lineBetweenHandlesHeight property --- Pod/Classes/TTRangeSlider.h | 5 +++++ Pod/Classes/TTRangeSlider.m | 32 ++++++++++++++++++++++++-------- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/Pod/Classes/TTRangeSlider.h b/Pod/Classes/TTRangeSlider.h index cdaf687..8d257ef 100644 --- a/Pod/Classes/TTRangeSlider.h +++ b/Pod/Classes/TTRangeSlider.h @@ -116,4 +116,9 @@ IB_DESIGNABLE */ @property (nonatomic, assign) CGFloat lineHeight; +/** + *Set the slider line betweehn handles' height (default 1.0). + */ +@property (nonatomic, assign) CGFloat lineBetweenHandlesHeight; + @end diff --git a/Pod/Classes/TTRangeSlider.m b/Pod/Classes/TTRangeSlider.m index ddb7f32..077541d 100644 --- a/Pod/Classes/TTRangeSlider.m +++ b/Pod/Classes/TTRangeSlider.m @@ -52,6 +52,7 @@ - (void)initialiseControl { _selectedHandleDiameterMultiplier = 1.7; _lineHeight = 1.0; + _lineBetweenHandlesHeight = 1.0; //draw the slider line self.sliderLine = [CALayer layer]; @@ -121,7 +122,7 @@ - (void)layoutSubviews { self.sliderLine.frame = CGRectMake(lineLeftSide.x, lineLeftSide.y, lineRightSide.x-lineLeftSide.x, self.lineHeight); self.sliderLine.cornerRadius = self.lineHeight / 2.0; - self.sliderLineBetweenHandles.cornerRadius = self.lineHeight / 2.0; + self.sliderLineBetweenHandles.cornerRadius = self.lineBetweenHandlesHeight / 2.0; [self updateLabelValues]; [self updateHandlePositions]; @@ -223,14 +224,24 @@ - (void)updateLabelValues { #pragma mark - Set Positions - (void)updateHandlePositions { - CGPoint leftHandleCenter = CGPointMake([self getXPositionAlongLineForValue:self.selectedMinimum], CGRectGetMidY(self.sliderLine.frame)); - self.leftHandle.position = leftHandleCenter; + + CGFloat linePositionY = self.sliderLine.frame.origin.y; + + linePositionY += (self.sliderLine.frame.size.height - self.lineBetweenHandlesHeight) / 2; + + CGFloat handleCenterY = linePositionY + (self.lineBetweenHandlesHeight / 2); + + CGPoint leftHandleCenter = CGPointMake([self getXPositionAlongLineForValue:self.selectedMinimum], handleCenterY); - CGPoint rightHandleCenter = CGPointMake([self getXPositionAlongLineForValue:self.selectedMaximum], CGRectGetMidY(self.sliderLine.frame)); - self.rightHandle.position= rightHandleCenter; - - //positioning for the dist slider line - self.sliderLineBetweenHandles.frame = CGRectMake(self.leftHandle.position.x, self.sliderLine.frame.origin.y, self.rightHandle.position.x-self.leftHandle.position.x, self.lineHeight); + CGPoint rightHandleCenter = CGPointMake([self getXPositionAlongLineForValue:self.selectedMaximum], handleCenterY); + + //update the handle first to prevent strange animations + + self.leftHandle.position = leftHandleCenter; + + self.rightHandle.position = rightHandleCenter; + + self.sliderLineBetweenHandles.frame = CGRectMake(self.leftHandle.position.x, handleCenterY, self.rightHandle.position.x-self.leftHandle.position.x, self.lineBetweenHandlesHeight); } - (void)updateLabelPositions { @@ -582,4 +593,9 @@ -(void)setLineHeight:(CGFloat)lineHeight{ [self setNeedsLayout]; } +-(void)setLineBetweenHandlesHeight:(CGFloat)lineBetweenHandlesHeight{ + _lineBetweenHandlesHeight = lineBetweenHandlesHeight; + [self setNeedsLayout]; +} + @end From 2578fb86fc01f65c1080ba558e87ba6eda6c5b7b Mon Sep 17 00:00:00 2001 From: Ricardo Pramana Suranta Date: Thu, 23 Jun 2016 18:11:39 +0700 Subject: [PATCH 3/7] Use lineBetweeHandlesHeight property for sample's rangeSliderCustom --- Example/RangeSliderDemo/ViewController.m | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Example/RangeSliderDemo/ViewController.m b/Example/RangeSliderDemo/ViewController.m index ff6b990..b54cefc 100644 --- a/Example/RangeSliderDemo/ViewController.m +++ b/Example/RangeSliderDemo/ViewController.m @@ -44,12 +44,17 @@ - (void)viewDidLoad { self.rangeSliderCustom.delegate = self; self.rangeSliderCustom.minValue = 0; self.rangeSliderCustom.maxValue = 100; - self.rangeSliderCustom.selectedMinimum = 40; - self.rangeSliderCustom.selectedMaximum = 60; + + self.rangeSliderCustom.selectedMinimum = 40; + self.rangeSliderCustom.selectedMaximum = 60; + self.rangeSliderCustom.handleImage = [UIImage imageNamed:@"custom-handle"]; self.rangeSliderCustom.selectedHandleDiameterMultiplier = 1; self.rangeSliderCustom.tintColorBetweenHandles = [UIColor redColor]; - self.rangeSliderCustom.lineHeight = 10; + + self.rangeSliderCustom.lineHeight = 7; + self.rangeSliderCustom.lineBetweenHandlesHeight = 10; + NSNumberFormatter *customFormatter = [[NSNumberFormatter alloc] init]; customFormatter.positiveSuffix = @"B"; self.rangeSliderCustom.numberFormatterOverride = customFormatter; From 4d0c89a4c2ee88081e09bab48ae707edb663711d Mon Sep 17 00:00:00 2001 From: Ricardo Pramana Suranta Date: Thu, 23 Jun 2016 18:21:23 +0700 Subject: [PATCH 4/7] Fix wrong value assignment in updateHandlePositions --- Pod/Classes/TTRangeSlider.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Pod/Classes/TTRangeSlider.m b/Pod/Classes/TTRangeSlider.m index 077541d..61b9be9 100644 --- a/Pod/Classes/TTRangeSlider.m +++ b/Pod/Classes/TTRangeSlider.m @@ -225,7 +225,7 @@ - (void)updateLabelValues { #pragma mark - Set Positions - (void)updateHandlePositions { - CGFloat linePositionY = self.sliderLine.frame.origin.y; + CGFloat linePositionY = self.sliderLine.frame.origin.y; linePositionY += (self.sliderLine.frame.size.height - self.lineBetweenHandlesHeight) / 2; @@ -241,7 +241,7 @@ - (void)updateHandlePositions { self.rightHandle.position = rightHandleCenter; - self.sliderLineBetweenHandles.frame = CGRectMake(self.leftHandle.position.x, handleCenterY, self.rightHandle.position.x-self.leftHandle.position.x, self.lineBetweenHandlesHeight); + self.sliderLineBetweenHandles.frame = CGRectMake(self.leftHandle.position.x, linePositionY, self.rightHandle.position.x-self.leftHandle.position.x, self.lineBetweenHandlesHeight); } - (void)updateLabelPositions { From 8797ebe14e63c552991be7d2330e433cb950292e Mon Sep 17 00:00:00 2001 From: Ricardo Pramana Suranta Date: Thu, 23 Jun 2016 18:30:25 +0700 Subject: [PATCH 5/7] Make lineBetweenHandlesHeight reset to lineHeight each time lineHeight is set to a new value --- Pod/Classes/TTRangeSlider.h | 4 ++-- Pod/Classes/TTRangeSlider.m | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Pod/Classes/TTRangeSlider.h b/Pod/Classes/TTRangeSlider.h index 8d257ef..f2769e9 100644 --- a/Pod/Classes/TTRangeSlider.h +++ b/Pod/Classes/TTRangeSlider.h @@ -112,12 +112,12 @@ IB_DESIGNABLE @property (nonatomic, strong) UIColor *tintColorBetweenHandles; /** - *Set the slider line height (default 1.0) + *Set the slider line height (default 1.0). Will reset @p lineBetweenHandlesHeight on assignment. */ @property (nonatomic, assign) CGFloat lineHeight; /** - *Set the slider line betweehn handles' height (default 1.0). + *Set the slider line between handles' height (default 1.0). Will be reset each time @p lineHeight is reset. */ @property (nonatomic, assign) CGFloat lineBetweenHandlesHeight; diff --git a/Pod/Classes/TTRangeSlider.m b/Pod/Classes/TTRangeSlider.m index 61b9be9..e75abc6 100644 --- a/Pod/Classes/TTRangeSlider.m +++ b/Pod/Classes/TTRangeSlider.m @@ -225,7 +225,7 @@ - (void)updateLabelValues { #pragma mark - Set Positions - (void)updateHandlePositions { - CGFloat linePositionY = self.sliderLine.frame.origin.y; + CGFloat linePositionY = self.sliderLine.frame.origin.y; linePositionY += (self.sliderLine.frame.size.height - self.lineBetweenHandlesHeight) / 2; @@ -590,6 +590,7 @@ -(void)setTintColorBetweenHandles:(UIColor *)tintColorBetweenHandles{ -(void)setLineHeight:(CGFloat)lineHeight{ _lineHeight = lineHeight; + _lineBetweenHandlesHeight = lineHeight; [self setNeedsLayout]; } From fbed69a7556c2daec75140c97cf6d527e14b7a7f Mon Sep 17 00:00:00 2001 From: Ricardo Pramana Suranta Date: Thu, 23 Jun 2016 18:32:15 +0700 Subject: [PATCH 6/7] Add lineBetweenHandlesHeight in README.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a594945..c63d13a 100644 --- a/README.md +++ b/README.md @@ -84,8 +84,12 @@ If set it will update the color of the handles. Default is `tintColor`. If set it will update the size of the handles. Default is `16.0`. #### `selectedHandleDiameterMultiplier` If set it update the scaling factor of the handle when selected. Default is `1.7`. If you don't want any scaling, set it to `1.0`. + #### `lineHeight` -Set the height of the line. It will automatically round the corners. If not specified, the default value will be `1.0`. +Set the height of the line. It will automatically round the corners. Will update `lineBetweenHandlesHeight` each time its set with a new value. If not specified, the default value will be `1.0`. + +#### `lineBetweenHandlesHeight` +Set the height of the line. It will automatically round the corners. Will be reset to `lineHeight` each time `lineHeight` is updated. If not specified, the default value will be `1.0`. ## Author From ddfc72b6f8f2a44ed30f908e5a8995591f6f19f8 Mon Sep 17 00:00:00 2001 From: Ricardo Pramana Suranta Date: Thu, 23 Jun 2016 18:44:18 +0700 Subject: [PATCH 7/7] Make setHandleImage sets its handle background colors via setHandleColor instead of directly --- Pod/Classes/TTRangeSlider.m | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Pod/Classes/TTRangeSlider.m b/Pod/Classes/TTRangeSlider.m index e75abc6..2c119a0 100644 --- a/Pod/Classes/TTRangeSlider.m +++ b/Pod/Classes/TTRangeSlider.m @@ -562,8 +562,7 @@ -(void)setHandleImage:(UIImage *)handleImage{ self.rightHandle.frame = startFrame; //Force layer background to transparant - self.leftHandle.backgroundColor = [[UIColor clearColor] CGColor]; - self.rightHandle.backgroundColor = [[UIColor clearColor] CGColor]; + self.handleColor = [UIColor clearColor]; } -(void)setHandleColor:(UIColor *)handleColor{