Skip to content

Commit 6fefc40

Browse files
committed
Added support to hide a handle. You can hide the lower handle and the control behaves like a regular slider with the extra customization.
1 parent dfb837e commit 6fefc40

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

NMRangeSlider/NMRangeSlider.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@
5050
@property(assign, nonatomic) float upperMinimumValue;
5151

5252

53+
@property (assign, nonatomic) BOOL lowerHandleHidden;
54+
@property (assign, nonatomic) BOOL upperHandleHidden;
55+
5356
// Images, these should be set before the control is displayed.
5457
// If they are not set, then the default images are used.
5558
// eg viewDidLoad

NMRangeSlider/NMRangeSlider.m

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ - (void) configureView
7777

7878
_lowerMaximumValue = NAN;
7979
_upperMinimumValue = NAN;
80+
_upperHandleHidden = NO;
81+
_lowerHandleHidden = NO;
8082
}
8183

8284
// ------------------------------------------------------------------------------------------------------
@@ -192,6 +194,18 @@ - (void)setUpperValue:(float)upperValue animated:(BOOL) animated
192194
[self setLowerValue:NAN upperValue:upperValue animated:animated];
193195
}
194196

197+
- (void) setLowerHandleHidden:(BOOL)lowerHandleHidden
198+
{
199+
_lowerHandleHidden = lowerHandleHidden;
200+
[self setNeedsLayout];
201+
}
202+
203+
- (void) setUpperHandleHidden:(BOOL)upperHandleHidden
204+
{
205+
_upperHandleHidden = upperHandleHidden;
206+
[self setNeedsLayout];
207+
}
208+
195209
//ON-Demand images. If the images are not set, then the default values are loaded.
196210

197211
- (UIImage *)trackBackgroundImage
@@ -318,9 +332,12 @@ - (CGRect)trackRect
318332
{
319333
retValue.size.height=self.bounds.size.height;
320334
}
321-
322-
float xLowerValue = ((self.bounds.size.width - _lowerHandle.frame.size.width) * (_lowerValue - _minimumValue) / (_maximumValue - _minimumValue))+(_lowerHandle.frame.size.width/2.0f);
323-
float xUpperValue = ((self.bounds.size.width - _upperHandle.frame.size.width) * (_upperValue - _minimumValue) / (_maximumValue - _minimumValue))+(_upperHandle.frame.size.width/2.0f);
335+
336+
float lowerHandleWidth = _lowerHandleHidden ? 2.0f : _lowerHandle.frame.size.width;
337+
float upperHandleWidth = _upperHandleHidden ? 2.0f : _upperHandle.frame.size.width;
338+
339+
float xLowerValue = ((self.bounds.size.width - lowerHandleWidth) * (_lowerValue - _minimumValue) / (_maximumValue - _minimumValue))+(lowerHandleWidth/2.0f);
340+
float xUpperValue = ((self.bounds.size.width - upperHandleWidth) * (_upperValue - _minimumValue) / (_maximumValue - _minimumValue))+(upperHandleWidth/2.0f);
324341

325342
retValue.origin = CGPointMake(xLowerValue, (self.bounds.size.height/2.0f) - (retValue.size.height/2.0f));
326343
retValue.size.width = xUpperValue-xLowerValue;
@@ -424,13 +441,33 @@ -(void)layoutSubviews
424441
_haveAddedSubviews=YES;
425442
[self addSubviews];
426443
}
427-
444+
445+
if(_lowerHandleHidden)
446+
{
447+
_lowerValue = _minimumValue;
448+
}
449+
450+
if(_upperHandleHidden)
451+
{
452+
_upperValue = _maximumValue;
453+
}
428454

429455
self.trackBackground.frame = [self trackBackgroundRect];
430456
self.track.frame = [self trackRect];
431457
self.track.image = [self trackImageForCurrentValues];
458+
459+
// Layout the lower handle
432460
self.lowerHandle.frame = [self thumbRectForValue:_lowerValue image:self.lowerHandleImageNormal];
461+
self.lowerHandle.image = self.lowerHandleHidden ? nil : self.lowerHandleImageNormal;
462+
self.lowerHandle.highlightedImage = self.lowerHandleHidden ? nil : self.lowerHandleImageHighlighted;
463+
self.lowerHandle.userInteractionEnabled = !self.lowerHandleHidden;
464+
465+
// Layoput the upper handle
433466
self.upperHandle.frame = [self thumbRectForValue:_upperValue image:self.upperHandleImageNormal];
467+
self.upperHandle.image = self.upperHandleHidden ? nil : self.upperHandleImageNormal;
468+
self.upperHandle.highlightedImage = self.upperHandleHidden ? nil : self.upperHandleImageHighlighted;
469+
self.upperHandle.userInteractionEnabled = !self.upperHandleHidden;
470+
434471
}
435472

436473
- (CGSize)intrinsicContentSize

0 commit comments

Comments
 (0)