【问题标题】:Fill separate colors for different Bezier Paths为不同的贝塞尔路径填充不同的颜色
【发布时间】:2026-02-21 03:25:01
【问题描述】:

我正在尝试像这样向不同的 bezierPaths 添加单独的颜色

UIGraphicsBeginImageContext(_v_sticker.frame.size);

UIColor *fillColor = [UIColor redColor];
[fillColor setFill];
UIColor *strokeColor = [UIColor blueColor];
[strokeColor setStroke];

p = [UIBezierPath bezierPath];
[p moveToPoint:CGPointMake(60, 10)];
[p addLineToPoint:CGPointMake(110, 60)];
[p addLineToPoint:CGPointMake(60, 110)];
[p addLineToPoint:CGPointMake(10, 60)];
[p closePath];
[p fill];
[p stroke];

fillColor = [UIColor redColor];
[fillColor setFill];
strokeColor = [UIColor blueColor];
[strokeColor setStroke];

p2 = [UIBezierPath bezierPath];
[p2 moveToPoint:CGPointMake(100, 10)];
[p2 addLineToPoint:CGPointMake(150, 60)];
[p2 addLineToPoint:CGPointMake(100, 110)];
[p2 addLineToPoint:CGPointMake(50, 60)];
[p2 closePath];
[p2 fill];
[p2 stroke];

CGMutablePathRef combinedPath = CGPathCreateMutableCopy(p.CGPath);
CGPathAddPath(combinedPath, NULL, p2.CGPath);
combined = [UIBezierPath bezierPathWithCGPath:combinedPath];
CFRelease(combinedPath);

mask = [CAShapeLayer new];
mask.path = combined.CGPath;

[_v_sticker.layer addSublayer:mask];
UIGraphicsEndImageContext();

但除了黑色,我什么也得不到。我可以给图层颜色但是我想直接分配不同的颜色并在单层贝塞尔路径中使用它们

谁能告诉我我哪里做错了?

【问题讨论】:

    标签: ios core-graphics uibezierpath


    【解决方案1】:

    你的代码有几个错误:

    1. 您创建了一个图像上下文,但您不访问该图像 (UIGraphicsGetImageFromCurrentImageContext())。
    2. 您没有在遮罩层中设置颜色(例如backgroundColorstrokeColor)。

    【讨论】:

    • 我正在使用 layer 属性来显示贝塞尔内容,而不是渲染图像,因为渲染的图像会像素化,但在它上面创建的图层不会。我需要指定视图背景颜色,但我想直接为路径提供颜色并将其保留为图层
    • 我的意思是遮罩层。您还必须设置它的颜色。
    • 好的,但是如果设置蒙版图层颜色,它将覆盖添加到图层的每条路径,但我想为不同的路径赋予不同的颜色,然后为其生成图层,使其具有颜色和质量
    • A CAShapeLayer 只能分别用背景、填充和描边颜色绘制路径。要绘制不同颜色的路径,您需要多个图层。