-
Notifications
You must be signed in to change notification settings - Fork 24
Expand file tree
/
Copy pathBSModalFloatRangePickerView.m
More file actions
90 lines (66 loc) · 2.59 KB
/
BSModalFloatRangePickerView.m
File metadata and controls
90 lines (66 loc) · 2.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//
// BSModalFloatRangePickerView.m
// GolfNow
//
// Created by Cameron Hall on 3/26/15.
// Copyright (c) 2015 Vertigo. All rights reserved.
//
#import "BSModalFloatRangePickerView.h"
@interface BSModalFloatRangePickerView()
@property (nonatomic) CGFloat floatInterval;
@property (nonatomic) CGFloat minRangeValue;
@property (nonatomic) CGFloat maxRangeValue;
@end
@implementation BSModalFloatRangePickerView
- (instancetype)initWithFloatInterval:(CGFloat)floatInterval andMinRange:(CGFloat)minRangeValue andMaxRange:(CGFloat)maxRangeValue {
if (self = [super init]) {
self.minRangeValue = minRangeValue;
self.maxRangeValue = maxRangeValue;
self.floatInterval = floatInterval;
if (self.minRangeValue > self.maxRangeValue) {
self.maxRangeValue = self.minRangeValue;
}
[self calculateRangeValues];
}
return self;
}
#pragma mark - BSModalRangePickerBase
- (void)calculateRangeValues {
CGFloat rangeDiff = self.maxRangeValue - self.minRangeValue;
NSInteger numberOfValues = rangeDiff / self.floatInterval + 1;
NSMutableArray *rangeValues = [NSMutableArray array];
for (NSInteger i = 0; i < numberOfValues; ++i) {
NSNumber *value = [NSNumber numberWithFloat:i * self.floatInterval];
[rangeValues addObject:value];
}
self.rangeValues = rangeValues;
}
- (NSString *)formatValue:(id)value forComponent:(NSInteger)component {
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
numberFormatter.numberStyle = NSNumberFormatterDecimalStyle;
NSString *formattedValue = [numberFormatter stringFromNumber:value];
return formattedValue;
}
- (NSUInteger)indexForSelectedValue:(id)value {
__block NSUInteger result = 0;
if (value) {
CGFloat floatValue = [value floatValue];
[self.rangeValues enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSNumber *rangeValue = (NSNumber *)obj;
CGFloat rangeFloatValue = [rangeValue floatValue];
if ([BSModalFloatRangePickerView floatValue:floatValue isEqualToFloat:rangeFloatValue]) {
result = idx;
*stop = YES;
}
}];
}
return result;
}
+ (BOOL)floatValue:(CGFloat)firstValue isEqualToFloat:(CGFloat)secondValue {
double diff = fabs(firstValue - secondValue);
firstValue = fabs(firstValue);
secondValue = fabs(secondValue);
double largest = (secondValue > firstValue) ? secondValue : firstValue;
return (diff <= largest * FLT_EPSILON);
}
@end