如何用渐变颜色的控制点填充贝塞尔路径

Posted

技术标签:

【中文标题】如何用渐变颜色的控制点填充贝塞尔路径【英文标题】:How to fill a bezier path with control points with gradient color 【发布时间】:2018-06-25 08:24:24 【问题描述】:

我需要用渐变颜色填充我的贝塞尔路径。但是效果不是我预期的,我知道这是绘制方向造成的。

如何实现第二张图的效果?

【问题讨论】:

到目前为止您尝试过什么?你的代码是什么样的? 【参考方案1】:

我的贝塞尔路径代码

        CGFloat deltaX = lineChartPoint.x - previousLineChartPoint.x;
        CGFloat controlPointX = previousLineChartPoint.x + (deltaX / 2);

        CGPoint controlPoint1 = CGPointMake(controlPointX, previousLineChartPoint.y);
        CGPoint controlPoint2 = CGPointMake(controlPointX, lineChartPoint.y);

        [bezierPath addCurveToPoint:CGPointMake(lineChartPoint.x, lineChartPoint.y) controlPoint1:controlPoint1 controlPoint2:controlPoint2];

我的渐变图层代码

self.gradientLayer = [CAGradientLayer layer];
    self.gradientLayer.frame = CGRectMake(kVPadding, 0, CGRectGetWidth(self.bounds) - 2 * kVPadding, CGRectGetHeight(self.bounds));
    self.gradientLayer.colors = @[(__bridge id)[UIColor colorWithHex:0x8362FC alpha:0.9].CGColor,(__bridge id)[UIColor colorWithHex:0x517DF7 alpha:0.1].CGColor];
    self.gradientLayer.locations=@[@0.0,@1.0];
    self.gradientLayer.startPoint = CGPointMake(0.0,0.0);
    self.gradientLayer.endPoint = CGPointMake(0.0,1);
    [self.layer addSublayer:self.gradientLayer];

    self.gradientShapeLayer = [[CAShapeLayer alloc] init];
    self.gradientLayer.mask = self.gradientShapeLayer;
    self.gradientShapeLayer.path = bezierPath.CGPath;

@Dragonthoughts

【讨论】:

以上是关于如何用渐变颜色的控制点填充贝塞尔路径的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 上用渐变填充路径

Swift:沿贝塞尔路径渐变(使用 CALayers)

使用贝塞尔路径作为剪贴蒙版

如何用线性渐变填充Android中的路径?

利用QPainter绘制各种图形(Shape, Pen 宽带,颜色,风格,Cap,Join,刷子)

transition属性实现hover渐变动画效果