Introduce UISlider minimumTrackTintColor, maximumTrackTintColor, thumbTintColor

This commit is contained in:
Xavier Schott 2015-12-06 22:01:50 -08:00
parent b1fa71000f
commit 0b7ee0cd9b
4 changed files with 56 additions and 13 deletions

View File

@ -41,10 +41,12 @@ IB_DESIGNABLE
@property (nonatomic) IBInspectable int trackStyle;
@property (nonatomic) IBInspectable CGFloat trackThickness;
@property (nonatomic) IBInspectable NSString * trackImage;
@property (nonatomic) IBInspectable UIColor * minimumTrackTintColor;
@property (nonatomic) IBInspectable UIColor * maximumTrackTintColor;
@property (nonatomic) IBInspectable int thumbStyle;
@property (nonatomic) IBInspectable CGSize thumbSize;
@property (nonatomic) IBInspectable UIColor * thumbColor;
@property (nonatomic) IBInspectable UIColor * thumbTintColor;
@property (nonatomic) IBInspectable CGFloat thumbSRadius;
@property (nonatomic) IBInspectable CGSize thumbSOffset;
@property (nonatomic) IBInspectable NSString * thumbImage;

View File

@ -39,9 +39,11 @@
@dynamic trackStyle;
@dynamic trackThickness;
@dynamic trackImage;
@dynamic minimumTrackTintColor;
@dynamic maximumTrackTintColor;
@dynamic thumbStyle;
@dynamic thumbSize;
@dynamic thumbColor;
@dynamic thumbTintColor;
@dynamic thumbImage;
@dynamic minimumValue;
@dynamic value;

View File

@ -58,10 +58,12 @@ typedef NS_ENUM(int, ComponentStyle) {
@property (nonatomic, assign) ComponentStyle trackStyle;
@property (nonatomic, assign) CGFloat trackThickness;
@property (nonatomic, strong) NSString * trackImage;
@property (nonatomic, strong) UIColor * minimumTrackTintColor;
@property (nonatomic, strong) UIColor * maximumTrackTintColor;
@property (nonatomic, assign) ComponentStyle thumbStyle;
@property (nonatomic, assign) CGSize thumbSize;
@property (nonatomic, strong) UIColor * thumbColor;
@property (nonatomic, strong) UIColor * thumbTintColor;
@property (nonatomic, assign) CGFloat thumbShadowRadius;
@property (nonatomic, assign) CGSize thumbShadowOffset;
@property (nonatomic, strong) NSString * thumbImage;

View File

@ -98,6 +98,16 @@ static CGSize iosThumbShadowOffset = (CGSize){0, 3};
[self layoutTrack];
}
- (void)setMinimumTrackTintColor:(UIColor *)minimumTrackTintColor {
_minimumTrackTintColor = minimumTrackTintColor;
[self layoutTrack];
}
- (void)setMaximumTrackTintColor:(UIColor *)maximumTrackTintColor {
_maximumTrackTintColor = maximumTrackTintColor;
[self layoutTrack];
}
- (void)setThumbStyle:(ComponentStyle)thumbStyle {
_thumbStyle = thumbStyle;
[self layoutTrack];
@ -109,6 +119,11 @@ static CGSize iosThumbShadowOffset = (CGSize){0, 3};
[self layoutTrack];
}
- (void)setThumbTintColor:(UIColor *)thumbTintColor {
_thumbTintColor = thumbTintColor;
[self layoutTrack];
}
- (void)setThumbImage:(NSString *)thumbImage {
_thumbImage = thumbImage;
@ -127,6 +142,11 @@ static CGSize iosThumbShadowOffset = (CGSize){0, 3};
[self layoutTrack];
}
- (void)setThumbShadowOffset:(CGSize)thumbShadowOffset {
_thumbShadowOffset = thumbShadowOffset;
[self layoutTrack];
}
- (void)setTicksListener:(NSObject<TGPControlsTicksProtocol> *)ticksListener {
_ticksListener = ticksListener;
[self.ticksListener tgpTicksDistanceChanged:self.ticksDistance sender:self];
@ -206,9 +226,11 @@ static CGSize iosThumbShadowOffset = (CGSize){0, 3};
_tickCount = 11;
_trackStyle = ComponentStyleIOS;
_trackThickness = 2.0;
_minimumTrackTintColor = nil;
_maximumTrackTintColor = [UIColor colorWithRed:0.8 green:0.8 blue:0.72 alpha:1];
_thumbStyle = ComponentStyleIOS;
_thumbSize = (CGSize) {10.0, 10.0};
_thumbColor = [UIColor lightGrayColor];
_thumbTintColor = nil;
_thumbShadowRadius = 0.0;
_thumbShadowOffset = CGSizeZero;
_intMinimumValue = -5;
@ -227,7 +249,7 @@ static CGSize iosThumbShadowOffset = (CGSize){0, 3};
_leftTrackLayer.backgroundColor = [self.tintColor CGColor];
[self.trackLayer addSublayer:self.leftTrackLayer];
_rightTrackLayer = [CALayer layer];
_rightTrackLayer.backgroundColor = [[UIColor colorWithRed:0.8 green:0.8 blue:0.72 alpha:1] CGColor];
_rightTrackLayer.backgroundColor = [self.maximumTrackTintColor CGColor];
[self.trackLayer addSublayer:self.rightTrackLayer];
// The thumb is its own CALayer, which brings in free animation
@ -351,7 +373,9 @@ static CGSize iosThumbShadowOffset = (CGSize){0, 3};
frame.size.width = self.thumbAbscisse - CGRectGetMinX(self.trackRectangle);
frame;
});
self.leftTrackLayer.backgroundColor = [self.tintColor CGColor];
self.leftTrackLayer.backgroundColor = ((nil == self.minimumTrackTintColor)
? [self.tintColor CGColor]
: [self.minimumTrackTintColor CGColor]);
self.rightTrackLayer.frame = ({
CGRect frame = self.trackLayer.bounds;
@ -359,6 +383,7 @@ static CGSize iosThumbShadowOffset = (CGSize){0, 3};
frame.origin.x = CGRectGetMaxX(self.leftTrackLayer.frame);
frame;
});
self.rightTrackLayer.backgroundColor = [self.maximumTrackTintColor CGColor];
}
- (void)drawThumb {
@ -387,7 +412,9 @@ static CGSize iosThumbShadowOffset = (CGSize){0, 3};
switch(self.thumbStyle) {
case ComponentStyleRounded: // A rounded thumb is circular
self.thumbLayer.backgroundColor = [self.thumbColor CGColor];
self.thumbLayer.backgroundColor = ((nil == self.thumbTintColor)
? [[UIColor lightGrayColor] CGColor]
: [self.thumbTintColor CGColor]);
self.thumbLayer.borderColor = [[UIColor clearColor] CGColor];
self.thumbLayer.borderWidth = 0.0;
self.thumbLayer.cornerRadius = self.thumbLayer.frame.size.width/2;
@ -405,7 +432,9 @@ static CGSize iosThumbShadowOffset = (CGSize){0, 3};
}
case ComponentStyleRectangular:
self.thumbLayer.backgroundColor = [self.thumbColor CGColor];
self.thumbLayer.backgroundColor = ((nil == self.thumbTintColor)
? [[UIColor lightGrayColor] CGColor]
: [self.thumbTintColor CGColor]);
self.thumbLayer.borderColor = [[UIColor clearColor] CGColor];
self.thumbLayer.borderWidth = 0.0;
self.thumbLayer.cornerRadius = 0.0;
@ -418,14 +447,22 @@ static CGSize iosThumbShadowOffset = (CGSize){0, 3};
break;
case ComponentStyleIOS:
default:
self.thumbLayer.backgroundColor = [[UIColor whiteColor] CGColor];
self.thumbLayer.borderColor = [[UIColor colorWithHue:0 saturation: 0 brightness: 0.8 alpha: 1]
CGColor];
self.thumbLayer.borderWidth = 0.5;
default: {
UIColor * backgroundColor = ((nil == self.thumbTintColor)
? [UIColor whiteColor]
: self.thumbTintColor);
self.thumbLayer.backgroundColor = [backgroundColor CGColor];
if(nil == self.thumbTintColor) {
const UIColor * borderColor = [UIColor colorWithHue:0 saturation: 0 brightness: 0.8 alpha: 1];
self.thumbLayer.borderColor = [borderColor CGColor];
self.thumbLayer.borderWidth = 0.5;
} else {
self.thumbLayer.borderWidth = 0;
}
self.thumbLayer.cornerRadius = self.thumbLayer.frame.size.width/2;
self.thumbLayer.allowsEdgeAntialiasing = YES;
break;
}
}
// Shadow