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..737430e 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,49 @@ - (void)loadChartWithDates { [_chartWithDates setChartData:chartData]; } +- (void)loadGradientChart { + _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 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 0000000..05b6571 Binary files /dev/null and b/Screenshots/lineGradient.png differ