我正在使用应用于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];
我希望你们能帮助我!
Update: 您建议我可以创建CAGradientLayer,然后将图层应用为其掩码 . 我没有给CAShapeLayer一个红色填充物 . 正如我所看到的,如果我将上层应用为CAGradientLayer的掩码,则某些渐变位于图形上方,有些则位于下方 . 我想要的是将所有渐变放置在图形的正下方 .
2 回答
也许我没有正确理解这个问题,但是如果你想要添加一致的渐变,你不能创建一个渐变层然后让你的graphLayer成为该层的掩码吗?
弄清楚坐标的最小最大边界,创建一个大小的CAGradientLayer,然后根据需要配置它,然后将graphLayer应用为它的掩码 . 然后将新的CAGradientLayer添加到self.layer .
这并没有考虑到中风,但如果这很重要,也应该不难应用 .
我通过创建两个单独的路径解决了这个问题:一个用于图形(如我的原始帖子所示),另一个从右下角开始,沿直线移动到左下角,然后从那里开始与图表相同的路径 . 通过这样做,路径很好地关闭,因为图形终止于与路径开始的相同的x坐标 .
从那里,我将第二条路径应用于CAShapeLayer,然后将此图层用作渐变图层的蒙版 .