CGPathAddEllipseInRect始终是最后一种颜色

时间:2014-01-18 13:09:51

标签: ios7 core-graphics

iOS 7.当CGContextSetRGBStrokeColor值不同时,为什么两个圆圈都是绿色。我看到最后一种颜色设置为两条路径......为什么会这样?如何以不同方式为每条路径着色?

- (void)drawRect:(CGRect)rect{

CGContextRef ctx = UIGraphicsGetCurrentContext();
CGMutablePathRef centerCirlce = CGPathCreateMutable();

//circle 1
CGContextBeginPath(ctx);
CGContextSetRGBStrokeColor(ctx, 1, 0.56f, 0.19f, 1);
CGContextSetRGBFillColor(ctx, 1.0, 1.0, 1.0, 1.0);
CGPathAddEllipseInRect(centerCirlce, NULL,CGRectMake(100, 100, 10, 10));
CGContextAddPath(ctx, centerCirlce);
CGContextClosePath(ctx);
CGContextStrokePath(ctx);

//circle 1
CGContextBeginPath(ctx);
CGContextSetRGBStrokeColor(ctx, 0.36f, 0.74f, 0.32f, 1);
CGContextSetRGBFillColor(ctx, 1.0, 1.0, 1.0, 1.0);
CGPathAddEllipseInRect(centerCirlce, NULL,CGRectMake(200, 200, 10, 10));
CGContextAddPath(ctx, centerCirlce);
CGContextClosePath(ctx);
CGContextStrokePath(ctx);
}

1 个答案:

答案 0 :(得分:1)

感谢您简化代码,现在我可以看到问题所在。

绘制第一个圆时,创建一个新路径并将椭圆添加到该路径。然后使用颜色配置上下文,添加上下文的路径,并添加描述在上下文中使用它的上下文路径。

此时您已经绘制了一个圆,并且上下文的状态具有旧颜色但没有路径。 然而,中心圆路径仍然包含旧椭圆。

然后通过向中心圆路径添加新椭圆来绘制第二个圆(此时此路径包含两个椭圆)。然后,就像以前一样,在上下文中配置一个新颜色,添加中心圆路径(包含两个椭圆)并描边上下文路径(这意味着旧的和新的圆圈都将用新颜色描边,在旧的颜色之上)。