如何在UIView中绘制具有不同颜色的多个UIBezierPath

问题描述:

我想在具有不同笔触和填充颜色的UIView中绘制多个UIBezierPath。

I would like to draw multiple UIBezierPath in a UIView with different stroke and fill color.

这是代码

- (void)drawRect:(CGRect)rect {

    context = UIGraphicsGetCurrentContext();

    [[UIColor grayColor] setFill]; 
    [[UIColor greenColor] setStroke];

    UIBezierPath *aPath = [[UIBezierPath alloc] init]; 
    [aPath moveToPoint:CGPointMake(227,34.25)];
    [aPath addLineToPoint:CGPointMake(298.25,34.75)];
    [aPath addLineToPoint:CGPointMake(298.5,82.5)];
    [aPath addLineToPoint:CGPointMake(251,83)];
    [aPath addLineToPoint:CGPointMake(251,67.5)];
    [aPath addLineToPoint:CGPointMake(227.25,66.75)];   
    [aPath closePath]; 
    aPath.lineWidth = 2;
    [aPath fill]; 
    [aPath stroke];

    UIBezierPath *aPath2 = [[UIBezierPath alloc] init];
    [aPath2 moveToPoint:CGPointMake(251.25,90.5)];
    [aPath2 addLineToPoint:CGPointMake(250.75,83.25)];
    [aPath2 addLineToPoint:CGPointMake(298.5,83)];
    [aPath2 addLineToPoint:CGPointMake(298.5,90.25)];
    [aPath2 closePath];
    aPath2.lineWidth = 2;
    [aPath2 fill]; 
    [aPath2 stroke];
    [paths addObject:aPath2];

问题是笔划和填充颜色是在当前上下文中设置的。
是否可以在同一个CGContextRef中绘制不同颜色的不同UIBezierPath?

The problem is that the stroke and the fill color are set on the current context. Is it possible to draw different UIBezierPath with different colors in the same CGContextRef?

或者我必须在单独的UIView中绘制每个UIBezierPath?

Or I have to draw each UIBezierPath in separate UIView?

你应该添加

[desiredStrokeColor setStroke];
[desiredFillColor setFill];

表示这些是在此上下文中必须进一步使用的新颜色。你应该在每次调用

indicating that these are the new colors that have to used further on in this context. You should do this before every time you call a

[aNewPath fill];
[aNewPath stroke];

以便用这些颜色绘制路径。

so that the paths be drawn with those colors.

无需为每个贝塞尔曲线路径使用新视图。