From 4e1ae41b7b6c7422cbb59a7cfaecac44305c6401 Mon Sep 17 00:00:00 2001 From: "huashou.yang@smartcoach.cn" Date: Wed, 25 May 2016 11:42:19 +0800 Subject: [PATCH 1/3] add gradientLayer for fillColor --- FSLineChart/Base.lproj/Main.storyboard | 13 +++++-- FSLineChart/FSLineChart/FSLineChart.h | 6 ++-- FSLineChart/FSLineChart/FSLineChart.m | 6 ++++ FSLineChart/ViewController.m | 48 ++++++++++++++++++++++++++ 4 files changed, 69 insertions(+), 4 deletions(-) diff --git a/FSLineChart/Base.lproj/Main.storyboard b/FSLineChart/Base.lproj/Main.storyboard index 02dea40..0e43edc 100644 --- a/FSLineChart/Base.lproj/Main.storyboard +++ b/FSLineChart/Base.lproj/Main.storyboard @@ -1,8 +1,8 @@ - + - + @@ -32,13 +32,21 @@ + + + + + + + + @@ -52,6 +60,7 @@ + diff --git a/FSLineChart/FSLineChart/FSLineChart.h b/FSLineChart/FSLineChart/FSLineChart.h index 0b0989e..a45c39a 100644 --- a/FSLineChart/FSLineChart/FSLineChart.h +++ b/FSLineChart/FSLineChart/FSLineChart.h @@ -95,6 +95,8 @@ typedef NS_ENUM(NSInteger, ValueLabelPositionType) { // Get the bounds of the chart - (CGFloat)minVerticalBound; - (CGFloat)maxVerticalBound; - - +/** + * gradient in fillcolor mode + */ +@property (nonatomic , strong) CAGradientLayer *gradientLayer; @end diff --git a/FSLineChart/FSLineChart/FSLineChart.m b/FSLineChart/FSLineChart/FSLineChart.m index b5390d4..3ff2cc2 100644 --- a/FSLineChart/FSLineChart/FSLineChart.m +++ b/FSLineChart/FSLineChart/FSLineChart.m @@ -361,6 +361,12 @@ - (void)strokeChart fillAnimation.fromValue = (id)noFill.CGPath; fillAnimation.toValue = (id)fill.CGPath; [fillLayer addAnimation:fillAnimation forKey:@"path"]; + + if (_gradientLayer) { + _gradientLayer.frame = fillLayer.frame; + _gradientLayer.mask = fillLayer; + [self.layer addSublayer:_gradientLayer]; + } } CAShapeLayer *pathLayer = [CAShapeLayer layer]; diff --git a/FSLineChart/ViewController.m b/FSLineChart/ViewController.m index ad743f8..0d87c3e 100644 --- a/FSLineChart/ViewController.m +++ b/FSLineChart/ViewController.m @@ -14,6 +14,7 @@ @interface ViewController () @property (nonatomic, strong) IBOutlet FSLineChart *chart; @property (nonatomic, strong) IBOutlet FSLineChart *chartWithDates; +@property (nonatomic, strong) IBOutlet FSLineChart *chartWithGradient; @end @@ -24,6 +25,7 @@ - (void)viewDidLoad { [self loadSimpleChart]; [self loadChartWithDates]; + [self loadGradientChart]; } #pragma mark - Setting up the charts @@ -82,4 +84,50 @@ - (void)loadChartWithDates { [_chartWithDates setChartData:chartData]; } +- (void)loadGradientChart { +// FSLineChart * lineChart = [[FSLineChart alloc] initWithFrame:CGRectMake(20, 260 + 166 + 10, [UIScreen mainScreen].bounds.size.width - 40, 166)]; + _chartWithGradient.verticalGridStep = 4; + _chartWithGradient.horizontalGridStep = 10; + + _chartWithGradient.labelForIndex = ^(NSUInteger item) { + return [NSString stringWithFormat:@"%lu",(unsigned long)item]; + }; + + _chartWithGradient.labelForValue = ^(CGFloat value) { + return [NSString stringWithFormat:@"%.f", value]; + }; + + CAGradientLayer *gradientLayer = [CAGradientLayer layer]; + //gradient direction + gradientLayer.startPoint = CGPointMake(0, 0); + gradientLayer.endPoint = CGPointMake(0, 1); + + //gradient colors + gradientLayer.colors = @[(__bridge id)[UIColor redColor].CGColor, + (__bridge id)[UIColor yellowColor].CGColor, + (__bridge id)[UIColor greenColor].CGColor + ]; + //gradient position for colors + gradientLayer.locations = @[@(0.3f), @(0.7f),@(0.9f)]; + + _chartWithGradient.fillColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.5]; + /** + * gradient only effect when fillColor isn't nil; + */ + _chartWithGradient.gradientLayer = gradientLayer; + _chartWithGradient.lineWidth = 2; + _chartWithGradient.color = [UIColor fsLightBlue]; + _chartWithGradient.valueLabelPosition = ValueLabelLeft; + _chartWithGradient.valueLabelTextColor = [UIColor fsDarkGray]; + _chartWithGradient.indexLabelTextColor = [UIColor fsDarkGray]; + _chartWithGradient.bezierSmoothing = YES; + + NSMutableArray* chartData = [NSMutableArray arrayWithCapacity:101]; + for(int i=0;i<101;i++) { + chartData[i] = [NSNumber numberWithFloat:(float)i / 30.0f + (float)(rand() % 100) / 200.0f]; + } + + [_chartWithGradient setChartData:chartData]; +} + @end From 0e67776cabed51b78637455a1d5662703851e5a9 Mon Sep 17 00:00:00 2001 From: "huashou.yang@smartcoach.cn" Date: Tue, 31 May 2016 14:16:36 +0800 Subject: [PATCH 2/3] modify READER.md, add a gradient img --- FSLineChart/ViewController.m | 9 +++++---- README.md | 1 + Screenshots/lineGradient.png | Bin 0 -> 38257 bytes 3 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 Screenshots/lineGradient.png diff --git a/FSLineChart/ViewController.m b/FSLineChart/ViewController.m index 0d87c3e..598fb97 100644 --- a/FSLineChart/ViewController.m +++ b/FSLineChart/ViewController.m @@ -87,7 +87,7 @@ - (void)loadChartWithDates { - (void)loadGradientChart { // FSLineChart * lineChart = [[FSLineChart alloc] initWithFrame:CGRectMake(20, 260 + 166 + 10, [UIScreen mainScreen].bounds.size.width - 40, 166)]; _chartWithGradient.verticalGridStep = 4; - _chartWithGradient.horizontalGridStep = 10; +// _chartWithGradient.horizontalGridStep = 10; _chartWithGradient.labelForIndex = ^(NSUInteger item) { return [NSString stringWithFormat:@"%lu",(unsigned long)item]; @@ -114,8 +114,8 @@ - (void)loadGradientChart { /** * gradient only effect when fillColor isn't nil; */ - _chartWithGradient.gradientLayer = gradientLayer; - _chartWithGradient.lineWidth = 2; +// _chartWithGradient.gradientLayer = gradientLayer; + _chartWithGradient.lineWidth = 0.2; _chartWithGradient.color = [UIColor fsLightBlue]; _chartWithGradient.valueLabelPosition = ValueLabelLeft; _chartWithGradient.valueLabelTextColor = [UIColor fsDarkGray]; @@ -124,7 +124,8 @@ - (void)loadGradientChart { NSMutableArray* chartData = [NSMutableArray arrayWithCapacity:101]; for(int i=0;i<101;i++) { - chartData[i] = [NSNumber numberWithFloat:(float)i / 30.0f + (float)(rand() % 100) / 200.0f]; +// chartData[i] = [NSNumber numberWithFloat:(float)i / 30.0f + (float)(rand() % 100) / 200.0f]; + chartData[i] = [NSNumber numberWithFloat:(float)(arc4random() % 200) + 1]; } [_chartWithGradient setChartData:chartData]; diff --git a/README.md b/README.md index d3f6983..3aef084 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ Screenshots ---   + Installing FSLineChart --- diff --git a/Screenshots/lineGradient.png b/Screenshots/lineGradient.png new file mode 100644 index 0000000000000000000000000000000000000000..05b6571b66c15a4c89199ca11fbb99d1d87ec34a GIT binary patch literal 38257 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 Date: Tue, 31 May 2016 16:48:41 +0800 Subject: [PATCH 3/3] delete useless code in project --- FSLineChart/ViewController.m | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/FSLineChart/ViewController.m b/FSLineChart/ViewController.m index 598fb97..737430e 100644 --- a/FSLineChart/ViewController.m +++ b/FSLineChart/ViewController.m @@ -85,9 +85,8 @@ - (void)loadChartWithDates { } - (void)loadGradientChart { -// FSLineChart * lineChart = [[FSLineChart alloc] initWithFrame:CGRectMake(20, 260 + 166 + 10, [UIScreen mainScreen].bounds.size.width - 40, 166)]; _chartWithGradient.verticalGridStep = 4; -// _chartWithGradient.horizontalGridStep = 10; + _chartWithGradient.horizontalGridStep = 10; _chartWithGradient.labelForIndex = ^(NSUInteger item) { return [NSString stringWithFormat:@"%lu",(unsigned long)item]; @@ -114,8 +113,8 @@ - (void)loadGradientChart { /** * gradient only effect when fillColor isn't nil; */ -// _chartWithGradient.gradientLayer = gradientLayer; - _chartWithGradient.lineWidth = 0.2; + _chartWithGradient.gradientLayer = gradientLayer; + _chartWithGradient.lineWidth = 2; _chartWithGradient.color = [UIColor fsLightBlue]; _chartWithGradient.valueLabelPosition = ValueLabelLeft; _chartWithGradient.valueLabelTextColor = [UIColor fsDarkGray]; @@ -124,8 +123,7 @@ - (void)loadGradientChart { NSMutableArray* chartData = [NSMutableArray arrayWithCapacity:101]; for(int i=0;i<101;i++) { -// chartData[i] = [NSNumber numberWithFloat:(float)i / 30.0f + (float)(rand() % 100) / 200.0f]; - chartData[i] = [NSNumber numberWithFloat:(float)(arc4random() % 200) + 1]; + chartData[i] = [NSNumber numberWithFloat:(float)i / 30.0f + (float)(rand() % 100) / 200.0f]; } [_chartWithGradient setChartData:chartData];