最简单的方法是使用原始图形贝塞尔曲线路径来帮助您构建蒙版并将此蒙版强加于渐变图层.现在将图层施加在渐变图层的顶部.
因此,例如,创建一个CAShapeLayer,关闭图形bezier路径,将其路径设置为形状图层的路径,并将其填充为黑色.现在你有一个掩码,它是图形下面积的形状.现在制作一个CAGradientLayer并将CAShapeLayer作为掩码.在此之前,放置实际图表.
例如(EDITED):
这是我用来创建绘图的代码(我的bezier路径非常简单,只有四个点由三条线连接,但你可以清楚地看到它下面的区域是一个渐变):
CAShapeLayer* shape = [[CAShapeLayer alloc] init];
shape.frame = self.graph.bounds;
CGFloat h = shape.frame.size.height;
CGFloat w = shape.frame.size.width;
NSArray* points = @[
[NSValue valueWithCGPoint:CGPointMake(0,h-50)],
[NSValue valueWithCGPoint:CGPointMake(70,h-100)],
[NSValue valueWithCGPoint:CGPointMake(140,h-75)],
[NSValue valueWithCGPoint:CGPointMake(w,h-150)],
];
UIBezierPath* p = [UIBezierPath new];
[p moveToPoint:[points[0] CGPointValue]];
for (NSInteger i = 1; i < points.count; i++)
[p addLineToPoint:[points[i] CGPointValue]];
shape.path = p.CGPath;
shape.strokeColor = [UIColor blackColor].CGColor;
shape.lineWidth = 2;
shape.fillColor = nil;
CAGradientLayer* grad = [[CAGradientLayer alloc] init];
grad.frame = self.graph.bounds;
grad.colors = @[(id)[UIColor blueColor].CGColor,
(id)[UIColor yellowColor].CGColor];
CAShapeLayer* mask = [[CAShapeLayer alloc] init];
mask.frame = self.graph.bounds;
[p addLineToPoint:CGPointMake(w,h)];
[p addLineToPoint:CGPointMake(0,h)];
[p closePath];
mask.path = p.CGPath;
mask.fillColor = [UIColor blackColor].CGColor;
grad.mask = mask;
[self.graph.layer addSublayer:grad];
[self.graph.layer addSublayer:shape];