Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions REDRangeSlider/REDRangeSlider/REDRangeSlider.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
18 changes: 13 additions & 5 deletions REDRangeSlider/REDRangeSlider/REDRangeSlider.m
Original file line number Diff line number Diff line change
Expand Up @@ -210,15 +210,19 @@ - (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;
}

- (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;
Expand Down Expand Up @@ -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) {

Expand All @@ -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];
Expand All @@ -283,6 +289,7 @@ - (void)rightHandlePanEngadged:(UIGestureRecognizer *)gesture {

if (panGesture.state == UIGestureRecognizerStateBegan) {
self.rightHandle.highlighted = YES;
self.rawRightValue = self.rightValue;
}
if (panGesture.state == UIGestureRecognizerStateChanged) {

Expand All @@ -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];
Expand Down
3 changes: 3 additions & 0 deletions REDRangeSlider/REDViewController.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
17 changes: 17 additions & 0 deletions REDRangeSlider/REDViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand All @@ -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 {
Expand Down
158 changes: 156 additions & 2 deletions REDRangeSlider/en.lproj/REDViewController.xib
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
<string>IBNSLayoutConstraint</string>
<string>IBProxyObject</string>
<string>IBUILabel</string>
<string>IBUISegmentedControl</string>
<string>IBUIView</string>
</array>
<array key="IBDocument.PluginDependencies">
Expand Down Expand Up @@ -74,7 +75,7 @@
<string key="NSFrame">{{228, 20}, {72, 21}}</string>
<reference key="NSSuperview" ref="774585933"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<reference key="NSNextKeyView" ref="326646486"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClipsSubviews">YES</bool>
Expand All @@ -89,6 +90,44 @@
<reference key="IBUIFont" ref="67625427"/>
<bool key="IBUIAdjustsFontSizeToFit">NO</bool>
</object>
<object class="IBUISegmentedControl" id="326646486">
<reference key="NSNextResponder" ref="774585933"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{10, 360}, {300, 30}}</string>
<reference key="NSSuperview" ref="774585933"/>
<reference key="NSWindow"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="IBUIOpaque">NO</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<int key="IBSegmentControlStyle">2</int>
<int key="IBNumberOfSegments">3</int>
<int key="IBSelectedSegmentIndex">0</int>
<array key="IBSegmentTitles">
<string>Unrestricted</string>
<string>Integers</string>
<string>Mirrored right</string>
</array>
<array class="NSMutableArray" key="IBSegmentWidths">
<real value="0.0"/>
<real value="0.0"/>
<real value="0.0"/>
</array>
<array class="NSMutableArray" key="IBSegmentEnabledStates">
<boolean value="YES"/>
<boolean value="YES"/>
<boolean value="YES"/>
</array>
<array class="NSMutableArray" key="IBSegmentContentOffsets">
<string>{0, 0}</string>
<string>{0, 0}</string>
<string>{0, 0}</string>
</array>
<array class="NSMutableArray" key="IBSegmentImages">
<object class="NSNull" id="4"/>
<reference ref="4"/>
<reference ref="4"/>
</array>
</object>
</array>
<string key="NSFrame">{{0, 20}, {320, 548}}</string>
<reference key="NSSuperview"/>
Expand Down Expand Up @@ -149,6 +188,23 @@
</object>
<int key="connectionID">24</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">restrictionSegmentedControl</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="326646486"/>
</object>
<int key="connectionID">40</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchEventConnection" key="connection">
<string key="label">segmentedControlChanged:</string>
<reference key="source" ref="326646486"/>
<reference key="destination" ref="372490531"/>
<int key="IBEventType">13</int>
</object>
<int key="connectionID">54</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
Expand All @@ -173,6 +229,38 @@
<int key="objectID">6</int>
<reference key="object" ref="774585933"/>
<array class="NSMutableArray" key="children">
<object class="IBNSLayoutConstraint" id="704100694">
<reference key="firstItem" ref="326646486"/>
<int key="firstAttribute">9</int>
<int key="relation">0</int>
<reference key="secondItem" ref="774585933"/>
<int key="secondAttribute">9</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">0.0</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="774585933"/>
<int key="scoringType">5</int>
<float key="scoringTypeFloat">22</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="904163028">
<reference key="firstItem" ref="774585933"/>
<int key="firstAttribute">4</int>
<int key="relation">0</int>
<reference key="secondItem" ref="326646486"/>
<int key="secondAttribute">4</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">159</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="774585933"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="251388100">
<reference key="firstItem" ref="774585933"/>
<int key="firstAttribute">6</int>
Expand Down Expand Up @@ -255,6 +343,7 @@
</object>
<reference ref="196987144"/>
<reference ref="672011645"/>
<reference ref="326646486"/>
</array>
<reference key="parent" ref="0"/>
</object>
Expand Down Expand Up @@ -362,6 +451,44 @@
<reference key="object" ref="1037484397"/>
<reference key="parent" ref="196987144"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">36</int>
<reference key="object" ref="326646486"/>
<array class="NSMutableArray" key="children">
<object class="IBNSLayoutConstraint" id="765535082">
<reference key="firstItem" ref="326646486"/>
<int key="firstAttribute">7</int>
<int key="relation">0</int>
<nil key="secondItem"/>
<int key="secondAttribute">0</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">300</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="326646486"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">1</int>
</object>
</array>
<reference key="parent" ref="774585933"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">50</int>
<reference key="object" ref="904163028"/>
<reference key="parent" ref="774585933"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">52</int>
<reference key="object" ref="765535082"/>
<reference key="parent" ref="326646486"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">53</int>
<reference key="object" ref="704100694"/>
<reference key="parent" ref="774585933"/>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
Expand All @@ -382,13 +509,24 @@
<string key="22.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="25.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="26.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="36.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<array key="36.IBViewMetadataConstraints">
<reference ref="765535082"/>
</array>
<boolean value="NO" key="36.IBViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<integer value="1" key="36.IUISegmentedControlInspectorSelectedSegmentMetadataKey"/>
<string key="50.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="52.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="53.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<array class="NSMutableArray" key="6.IBViewMetadataConstraints">
<reference ref="759509756"/>
<reference ref="67870490"/>
<reference ref="511148964"/>
<reference ref="846149576"/>
<reference ref="251388100"/>
<reference ref="904163028"/>
<reference ref="704100694"/>
</array>
<string key="8.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<array class="NSMutableArray" key="8.IBViewMetadataConstraints">
Expand All @@ -401,7 +539,7 @@
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">35</int>
<int key="maxID">54</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
Expand All @@ -416,15 +554,31 @@
<object class="IBPartialClassDescription">
<string key="className">REDViewController</string>
<string key="superclassName">UIViewController</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">segmentedControlChanged:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string key="NS.key.0">segmentedControlChanged:</string>
<object class="IBActionInfo" key="NS.object.0">
<string key="name">segmentedControlChanged:</string>
<string key="candidateClassName">id</string>
</object>
</object>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="leftValueLabel">UILabel</string>
<string key="restrictionSegmentedControl">UISegmentedControl</string>
<string key="rightValueLabel">UILabel</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="leftValueLabel">
<string key="name">leftValueLabel</string>
<string key="candidateClassName">UILabel</string>
</object>
<object class="IBToOneOutletInfo" key="restrictionSegmentedControl">
<string key="name">restrictionSegmentedControl</string>
<string key="candidateClassName">UISegmentedControl</string>
</object>
<object class="IBToOneOutletInfo" key="rightValueLabel">
<string key="name">rightValueLabel</string>
<string key="candidateClassName">UILabel</string>
Expand Down