From 07048586394dc06c22f495a1fa3a241c3ab459e7 Mon Sep 17 00:00:00 2001 From: Colas Date: Sat, 26 Sep 2015 11:24:47 -0400 Subject: [PATCH 1/3] Fix https://github.com/nealyoung/NYSegmentedControl/issues/27 --- NYSegmentedControl/NYSegmentIndicator.m | 38 +++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/NYSegmentedControl/NYSegmentIndicator.m b/NYSegmentedControl/NYSegmentIndicator.m index 3f463db..783ba0f 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 { @@ -67,19 +73,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 From bdfa17f10bd6145281a9a0f4b219ee08f7f7d7f8 Mon Sep 17 00:00:00 2001 From: Colas Date: Sun, 27 Sep 2015 19:19:29 -0400 Subject: [PATCH 2/3] Fix the thin line bug No need to override drawRect anymore --- NYSegmentedControl/NYSegmentIndicator.m | 10 +--- NYSegmentedControl/NYSegmentLabel.h | 1 + NYSegmentedControl/NYSegmentLabel.m | 3 + .../NYSegmentedControl+CBDSettings.h | 19 +++++++ .../NYSegmentedControl+CBDSettings.m | 55 +++++++++++++++++++ 5 files changed, 79 insertions(+), 9 deletions(-) create mode 100644 NYSegmentedControlDemo/NYSegmentedControl+CBDSettings.h create mode 100644 NYSegmentedControlDemo/NYSegmentedControl+CBDSettings.m diff --git a/NYSegmentedControl/NYSegmentIndicator.m b/NYSegmentedControl/NYSegmentIndicator.m index 783ba0f..387faee 100644 --- a/NYSegmentedControl/NYSegmentIndicator.m +++ b/NYSegmentedControl/NYSegmentIndicator.m @@ -36,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 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..aeab7d6 100644 --- a/NYSegmentedControl/NYSegmentLabel.m +++ b/NYSegmentedControl/NYSegmentLabel.m @@ -35,6 +35,9 @@ - (void)drawRect:(CGRect)rect { // Create a mask from the text mask = CGBitmapContextCreateImage(context); + CGContextSetShadowWithColor (context, CGSizeMake(3, 3), 5, [UIColor blackColor].CGColor);// 11 + + 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 From be369f52ed08238d91fe33ff83a2eba5e03fa20f Mon Sep 17 00:00:00 2001 From: Colas Date: Sun, 27 Sep 2015 19:20:10 -0400 Subject: [PATCH 3/3] Fix the thin line bug No need to override drawRect anymore --- NYSegmentedControl/NYSegmentLabel.m | 3 --- 1 file changed, 3 deletions(-) diff --git a/NYSegmentedControl/NYSegmentLabel.m b/NYSegmentedControl/NYSegmentLabel.m index aeab7d6..2f85878 100644 --- a/NYSegmentedControl/NYSegmentLabel.m +++ b/NYSegmentedControl/NYSegmentLabel.m @@ -34,9 +34,6 @@ - (void)drawRect:(CGRect)rect { // Create a mask from the text mask = CGBitmapContextCreateImage(context); - - CGContextSetShadowWithColor (context, CGSizeMake(3, 3), 5, [UIColor blackColor].CGColor);// 11 - CGContextSaveGState(context); CGContextTranslateCTM(context, 0, self.frame.size.height);