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; diff --git a/Pod/Classes/TTRangeSlider.h b/Pod/Classes/TTRangeSlider.h index cdaf687..f2769e9 100644 --- a/Pod/Classes/TTRangeSlider.h +++ b/Pod/Classes/TTRangeSlider.h @@ -112,8 +112,13 @@ 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 between handles' height (default 1.0). Will be reset each time @p lineHeight is reset. + */ +@property (nonatomic, assign) CGFloat lineBetweenHandlesHeight; + @end diff --git a/Pod/Classes/TTRangeSlider.m b/Pod/Classes/TTRangeSlider.m index fe7b76e..2c119a0 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,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.lineBetweenHandlesHeight / 2.0; + [self updateLabelValues]; [self updateHandlePositions]; [self updateLabelPositions]; @@ -222,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; - - 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); + + 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], 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, linePositionY, self.rightHandle.position.x-self.leftHandle.position.x, self.lineBetweenHandlesHeight); } - (void)updateLabelPositions { @@ -550,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{ @@ -578,7 +589,13 @@ -(void)setTintColorBetweenHandles:(UIColor *)tintColorBetweenHandles{ -(void)setLineHeight:(CGFloat)lineHeight{ _lineHeight = lineHeight; + _lineBetweenHandlesHeight = lineHeight; [self setNeedsLayout]; } +-(void)setLineBetweenHandlesHeight:(CGFloat)lineBetweenHandlesHeight{ + _lineBetweenHandlesHeight = lineBetweenHandlesHeight; + [self setNeedsLayout]; +} + @end 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