diff --git a/NYSegmentedControl/NYSegmentIndicator.m b/NYSegmentedControl/NYSegmentIndicator.m index 3f463db..387faee 100644 --- a/NYSegmentedControl/NYSegmentIndicator.m +++ b/NYSegmentedControl/NYSegmentIndicator.m @@ -9,6 +9,12 @@ #import "NYSegmentIndicator.h" + +@interface NYSegmentIndicator () +@property (nonatomic, strong, readwrite) CALayer * gradientLayer ; +@end + + @implementation NYSegmentIndicator + (Class)layerClass { @@ -30,15 +36,7 @@ - (id)initWithFrame:(CGRect)frame { return self; } -- (void)drawRect:(CGRect)rect { - if (self.drawsGradientBackground) { - CAGradientLayer *gradientLayer = (CAGradientLayer *)self.layer; - gradientLayer.colors = @[(__bridge id)[self.gradientTopColor CGColor], - (__bridge id)[self.gradientBottomColor CGColor]]; - } else { - self.layer.backgroundColor = [self.backgroundColor CGColor]; - } -} + #pragma mark - Getters and Setters @@ -67,19 +65,45 @@ - (CGFloat)cornerRadius { return self.layer.cornerRadius; } + - (void)setDrawsGradientBackground:(BOOL)drawsGradientBackground { _drawsGradientBackground = drawsGradientBackground; - [self setNeedsDisplay]; + + if (drawsGradientBackground) + { + CAGradientLayer * gradientLayer = [[CAGradientLayer alloc] init] ; + gradientLayer = [[CAGradientLayer alloc] init] ; + gradientLayer.frame = self.layer.frame ; + + gradientLayer.colors = @[(__bridge id)[self.gradientTopColor CGColor], + (__bridge id)[self.gradientBottomColor CGColor]]; + + [self.layer addSublayer:gradientLayer] ; + [self.gradientLayer removeFromSuperlayer] ; + self.gradientLayer = gradientLayer ; + } + else + { + [self.gradientLayer removeFromSuperlayer] ; + self.gradientLayer = nil ; + } } + - (void)setGradientTopColor:(UIColor *)gradientTopColor { _gradientTopColor = gradientTopColor; - [self setNeedsDisplay]; + + // recreate the gradient layer + [self setDrawsGradientBackground:self.drawsGradientBackground] ; } - (void)setGradientBottomColor:(UIColor *)gradientBottomColor { _gradientBottomColor = gradientBottomColor; - [self setNeedsDisplay]; + + // recreate the gradient layer + [self setDrawsGradientBackground:self.drawsGradientBackground] ; } + + @end diff --git a/NYSegmentedControl/NYSegmentLabel.h b/NYSegmentedControl/NYSegmentLabel.h index 31c5a19..a908e04 100644 --- a/NYSegmentedControl/NYSegmentLabel.h +++ b/NYSegmentedControl/NYSegmentLabel.h @@ -7,6 +7,7 @@ // https://github.com/nealyoung/NYSegmentedControl // +#import #import @interface NYSegmentLabel : UILabel diff --git a/NYSegmentedControl/NYSegmentLabel.m b/NYSegmentedControl/NYSegmentLabel.m index 2f28519..2f85878 100644 --- a/NYSegmentedControl/NYSegmentLabel.m +++ b/NYSegmentedControl/NYSegmentLabel.m @@ -34,7 +34,7 @@ - (void)drawRect:(CGRect)rect { // Create a mask from the text mask = CGBitmapContextCreateImage(context); - + CGContextSaveGState(context); CGContextTranslateCTM(context, 0, self.frame.size.height); CGContextScaleCTM(context, 1.0, (CGFloat) -1.0); diff --git a/NYSegmentedControlDemo/NYSegmentedControl+CBDSettings.h b/NYSegmentedControlDemo/NYSegmentedControl+CBDSettings.h new file mode 100644 index 0000000..99653a1 --- /dev/null +++ b/NYSegmentedControlDemo/NYSegmentedControl+CBDSettings.h @@ -0,0 +1,19 @@ +// +// NYSegmentedControl+CBDSettings.h +// SmartMathsMP +// +// Created by Colas on 11/08/2015. +// Copyright (c) 2015 cassiopeia. All rights reserved. +// + +#import "NYSegmentedControl.h" + +@interface NYSegmentedControl (CBDSettings) + +- (void)setUpForSegmentColor:(UIColor *)segmentColor + titleColor:(UIColor *)titleColor + selectedTitleColor:(UIColor *)selectedTitleColor + font:(UIFont *)font + cornerRadius:(CGFloat)cornerRadius ; + +@end diff --git a/NYSegmentedControlDemo/NYSegmentedControl+CBDSettings.m b/NYSegmentedControlDemo/NYSegmentedControl+CBDSettings.m new file mode 100644 index 0000000..65a824c --- /dev/null +++ b/NYSegmentedControlDemo/NYSegmentedControl+CBDSettings.m @@ -0,0 +1,55 @@ +// +// NYSegmentedControl+CBDSettings.m +// SmartMathsMP +// +// Created by Colas on 11/08/2015. +// Copyright (c) 2015 cassiopeia. All rights reserved. +// + +#import "NYSegmentedControl+CBDSettings.h" + +@implementation NYSegmentedControl (CBDSettings) + + +- (void)setUpForSegmentColor:(UIColor *)segmentColor + titleColor:(UIColor *)titleColor + selectedTitleColor:(UIColor *)selectedTitleColor + font:(UIFont *)font + cornerRadius:(CGFloat)cornerRadius +{ + /* + Normal + */ + self.titleFont = font ; + self.titleTextColor = titleColor ; + + /* + Selected + */ + self.selectedTitleFont = font ; + self.selectedTitleTextColor = selectedTitleColor ; + + // self.segmentIndicatorBackgroundColor = segmentColor ; + + self.segmentIndicatorGradientTopColor = segmentColor ;//[UIColor colorWithRed:0.30 green:0.50 blue:0.88f alpha:1.0f]; + self.segmentIndicatorGradientBottomColor = segmentColor ; //[UIColor colorWithRed:0.20 green:0.35 blue:0.75f alpha:1.0f]; + self.drawsGradientBackground = YES ; +// self.segmentIndicatorBorderColor = segmentColor ; +// self.segmentIndicatorBorderWidth = 0.0f ; +// + /* + General + */ +// self.borderWidth = 0.0f ; +// self.borderColor = [UIColor clearColor] ; +// self.backgroundColor = [UIColor clearColor] ; +// self.cornerRadius = cornerRadius ; +// +// self.segmentIndicatorInset = 0.0f ; +// +// self.drawsGradientBackground = NO; +// self.drawsSegmentIndicatorGradientBackground = NO; + +} + +@end