diff --git a/REDRangeSlider/REDRangeSlider/REDRangeSlider.h b/REDRangeSlider/REDRangeSlider/REDRangeSlider.h
index 9071441..6c3fd6e 100644
--- a/REDRangeSlider/REDRangeSlider/REDRangeSlider.h
+++ b/REDRangeSlider/REDRangeSlider/REDRangeSlider.h
@@ -15,6 +15,8 @@
@property (assign, nonatomic) CGFloat maxValue;
@property (assign, nonatomic) CGFloat leftValue;
@property (assign, nonatomic) CGFloat rightValue;
+@property (assign, nonatomic) CGFloat rawLeftValue;
+@property (assign, nonatomic) CGFloat rawRightValue;
@property (strong, nonatomic) UIImage *handleImage;
@property (strong, nonatomic) UIImage *leftHandleImage;
diff --git a/REDRangeSlider/REDRangeSlider/REDRangeSlider.m b/REDRangeSlider/REDRangeSlider/REDRangeSlider.m
index 4f713cf..ff27970 100644
--- a/REDRangeSlider/REDRangeSlider/REDRangeSlider.m
+++ b/REDRangeSlider/REDRangeSlider/REDRangeSlider.m
@@ -210,7 +210,9 @@ - (UIImage *)rightHandleHighlightedImage {
- (UIImage *)trackBackgroundImage {
if(!_trackBackgroundImage) {
- UIImage *image = [[UIImage imageNamed:@"slider-track-background"] resizableImageWithCapInsets:UIEdgeInsetsMake(4, 5, 4, 5)];
+ UIImage *image = ([UIImage instancesRespondToSelector:@selector(resizableImageWithCapInsets:)])
+ ? [[UIImage imageNamed:@"slider-track-background"] resizableImageWithCapInsets:UIEdgeInsetsMake(4, 5, 4, 5)] // iOS5+
+ : [[UIImage imageNamed:@"slider-track-background"] stretchableImageWithLeftCapWidth:5 topCapHeight:4]; // Same result, pre-iOS5 (deprecated from iOS5)
_trackBackgroundImage = image;
}
return _trackBackgroundImage;
@@ -218,7 +220,9 @@ - (UIImage *)trackBackgroundImage {
- (UIImage *)trackFillImage {
if(!_trackFillImage) {
- UIImage *image = [[UIImage imageNamed:@"slider-track-fill"] resizableImageWithCapInsets:UIEdgeInsetsMake(4, 5, 4, 5)];
+ UIImage *image = ([UIImage instancesRespondToSelector:@selector(resizableImageWithCapInsets:)])
+ ? [[UIImage imageNamed:@"slider-track-fill"] resizableImageWithCapInsets:UIEdgeInsetsMake(4, 5, 4, 5)] // iOS5+
+ : [[UIImage imageNamed:@"slider-track-fill"] stretchableImageWithLeftCapWidth:5 topCapHeight:4]; // Same result, pre-iOS5 (deprecated from iOS5)
_trackFillImage = image;
}
return _trackFillImage;
@@ -254,6 +258,7 @@ - (void)leftHandlePanEngadged:(UIGestureRecognizer *)gesture {
if (panGesture.state == UIGestureRecognizerStateBegan) {
self.leftHandle.highlighted = YES;
+ self.rawLeftValue = self.leftValue;
}
else if (panGesture.state == UIGestureRecognizerStateChanged) {
@@ -262,8 +267,9 @@ - (void)leftHandlePanEngadged:(UIGestureRecognizer *)gesture {
CGFloat trackOneHundredPercent = self.trackWidth-self.handleImage.size.width;
CGFloat trackPercentageChange = (pointInView.x / trackOneHundredPercent)*100;
-
- self.leftValue += (trackPercentageChange/100.0) * oneHundredPercentOfValues;
+
+ self.rawLeftValue += (trackPercentageChange/100.0) * oneHundredPercentOfValues;
+ self.leftValue = self.rawLeftValue;
[panGesture setTranslation:CGPointZero inView:self];
[self sendActionsForControlEvents:UIControlEventValueChanged];
@@ -283,6 +289,7 @@ - (void)rightHandlePanEngadged:(UIGestureRecognizer *)gesture {
if (panGesture.state == UIGestureRecognizerStateBegan) {
self.rightHandle.highlighted = YES;
+ self.rawRightValue = self.rightValue;
}
if (panGesture.state == UIGestureRecognizerStateChanged) {
@@ -292,7 +299,8 @@ - (void)rightHandlePanEngadged:(UIGestureRecognizer *)gesture {
CGFloat trackOneHundredPercent = self.trackWidth-self.handleImage.size.width;
CGFloat trackPercentageChange = (pointInView.x / trackOneHundredPercent)*100;
- self.rightValue += (trackPercentageChange/100.0) * oneHundredPercentOfValues;
+ self.rawRightValue += (trackPercentageChange/100.0) * oneHundredPercentOfValues;
+ self.rightValue = self.rawRightValue;
[panGesture setTranslation:CGPointZero inView:self];
[self sendActionsForControlEvents:UIControlEventValueChanged];
diff --git a/REDRangeSlider/REDViewController.h b/REDRangeSlider/REDViewController.h
index b0ff0a7..15ee580 100644
--- a/REDRangeSlider/REDViewController.h
+++ b/REDRangeSlider/REDViewController.h
@@ -13,5 +13,8 @@
@property (weak, nonatomic) IBOutlet UILabel *leftValueLabel;
@property (weak, nonatomic) IBOutlet UILabel *rightValueLabel;
+@property (weak, nonatomic) IBOutlet UISegmentedControl *restrictionSegmentedControl;
+
+- (IBAction)segmentedControlChanged:(id)sender;
@end
diff --git a/REDRangeSlider/REDViewController.m b/REDRangeSlider/REDViewController.m
index 2b16256..b51f0ea 100644
--- a/REDRangeSlider/REDViewController.m
+++ b/REDRangeSlider/REDViewController.m
@@ -29,6 +29,8 @@ - (void)viewDidLoad {
self.rangeSlider = [[REDRangeSlider alloc] initWithFrame:CGRectMake(0, 0, 200, 20)];
self.rangeSlider.center = self.view.center;
[self.rangeSlider addTarget:self action:@selector(rangeSliderValueChanged:) forControlEvents:UIControlEventValueChanged];
+ self.rangeSlider.minValue = 0.0;
+ self.rangeSlider.maxValue = 20.0;
[self.view addSubview:self.rangeSlider];
[self updateSliderLabels];
@@ -43,9 +45,24 @@ - (void)didReceiveMemoryWarning {
- (void)rangeSliderValueChanged:(id)sender {
+ switch (self.restrictionSegmentedControl.selectedSegmentIndex) {
+ case 1:
+ self.rangeSlider.leftValue = roundf(self.rangeSlider.leftValue);
+ self.rangeSlider.rightValue = roundf(self.rangeSlider.rightValue);
+ break;
+ case 2:
+ self.rangeSlider.rightValue = self.rangeSlider.maxValue - self.rangeSlider.minValue - self.rangeSlider.leftValue;
+ break;
+ }
+
[self updateSliderLabels];
}
+- (void)segmentedControlChanged:(id)sender {
+ [self rangeSliderValueChanged:sender];
+}
+
+
#pragma mark -
- (void)updateSliderLabels {
diff --git a/REDRangeSlider/en.lproj/REDViewController.xib b/REDRangeSlider/en.lproj/REDViewController.xib
index cb9853f..9c22d36 100644
--- a/REDRangeSlider/en.lproj/REDViewController.xib
+++ b/REDRangeSlider/en.lproj/REDViewController.xib
@@ -14,6 +14,7 @@
IBNSLayoutConstraint
IBProxyObject
IBUILabel
+ IBUISegmentedControl
IBUIView
@@ -74,7 +75,7 @@
{{228, 20}, {72, 21}}
-
+
_NS:9
NO
YES
@@ -89,6 +90,44 @@
NO
+
{{0, 20}, {320, 548}}
@@ -149,6 +188,23 @@
24
+
+
+ restrictionSegmentedControl
+
+
+
+ 40
+
+
+
+ segmentedControlChanged:
+
+
+ 13
+
+ 54
+
@@ -173,6 +229,38 @@
6
+
+
+ 9
+ 0
+
+ 9
+ 1
+
+ 0.0
+
+ 1000
+
+ 5
+ 22
+ 2
+
+
+
+ 4
+ 0
+
+ 4
+ 1
+
+ 159
+
+ 1000
+
+ 3
+ 9
+ 3
+
6
@@ -255,6 +343,7 @@
+
@@ -362,6 +451,44 @@
+
+ 36
+
+
+
+
+ 7
+ 0
+
+ 0
+ 1
+
+ 300
+
+ 1000
+
+ 3
+ 9
+ 1
+
+
+
+
+
+ 50
+
+
+
+
+ 52
+
+
+
+
+ 53
+
+
+
@@ -382,6 +509,15 @@
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+
+
+
+
+
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
@@ -389,6 +525,8 @@
+
+
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
@@ -401,7 +539,7 @@
- 35
+ 54
@@ -416,8 +554,20 @@
REDViewController
UIViewController
+
+ segmentedControlChanged:
+ id
+
+
+ segmentedControlChanged:
+
+ segmentedControlChanged:
+ id
+
+
UILabel
+ UISegmentedControl
UILabel
@@ -425,6 +575,10 @@
leftValueLabel
UILabel
+
+ restrictionSegmentedControl
+ UISegmentedControl
+
rightValueLabel
UILabel