【发布时间】:2023-07-14 18:32:01
【问题描述】:
我正在使用应用于 CAShapeLayer 的 CGPath 绘制图形。图形本身画得很好,但我想在它下面添加一个渐变。我的问题是路径是用一条从最后一点到第一点的直线封闭的(见下文)——这会使渐变填充看起来非常荒谬。
据我所知,避免这个问题的唯一方法是再画两条线:一条从图表的最后一点到右下角,另一条从那里到左下角角落。这会很好地关闭路径,但它会在图表中添加一条底线,这是我不想要的。
如果我使用 CGContext,我可以通过将最后两行的笔触颜色更改为透明来轻松解决这个问题。但是,使用下面的代码,我看不出这怎么可能。
CGMutablePathRef graphPath = CGPathCreateMutable();
for (NSUInteger i = 0; i < self.coordinates.count; i++) {
CGPoint coordinate = [self.coordinates[i] CGPointValue];
if (!i) {
CGPathMoveToPoint(graphPath, NULL, coordinate.x, coordinate.y);
} else {
CGPathAddLineToPoint(graphPath, NULL, coordinate.x, coordinate.y);
}
}
CAShapeLayer *graphLayer = [CAShapeLayer new];
graphLayer.path = graphPath;
graphLayer.strokeColor = [UIColor whiteColor].CGColor;
graphLayer.fillColor = [UIColor redColor].CGColor;
[self.layer addSublayer:graphLayer];
希望大家能帮帮我!
更新:您建议我可以创建一个 CAGradientLayer,然后将图形图层应用为其蒙版。但是,当图形/路径看起来像它的样子时,我看不出它是如何工作的。我已经用另一个图表替换了上面的图像,希望能更好地说明问题(请注意,我已经给 CAShapeLayer 一个红色填充)。正如我所看到的,如果我将上面的图层应用为 CAGradientLayer 的蒙版,一些渐变将位于图形上方,一些位于下方。我想要的是将所有渐变放在图形的正下方。
【问题讨论】:
-
这是您的解决方案:*.com/a/7264787/312312
-
你真的想要那个红色填充吗?还是只希望图形下方的区域用渐变填充,而没有可见的对角线?
-
@robmayoff 我不想要红色填充,不;只是从图形线正下方开始的渐变。
-
@Lefteris 请查看我的更新。我认为您链接到的解决方案不适用于此特定问题。
标签: ios objective-c cashapelayer cgpath