我正试图用iPhone / Touch SDK绘制一些简单的线条。我希望能够更改行的颜色,但调用CGContextSetRGBStrokeColor似乎不会影响使用CGContextAddLineToPoint创建的绘制线,直到实际调用CGContextStrokePath。因此,如果我进行多次调用以更改颜色,则只有在CGContextStrokePath之前生成的颜色才会生效。这就是我的意思:
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextMoveToPoint(ctx, 0, 0);
CGContextSetRGBStrokeColor(ctx,1,0,0,1);
CGContextAddLineToPoint(ctx, 100, 100);
//CGContextStrokePath(ctx);
CGContextSetRGBStrokeColor(ctx,0,1,0,1);
CGContextAddLineToPoint(ctx, 200, 300);
//CGContextStrokePath(ctx);
CGContextSetRGBStrokeColor(ctx,0,0,1,1);
CGContextStrokePath(ctx);
}
我认为我正在做一些可怕的错误,我只是无法弄清楚是什么。我想如果我添加了CGContextStrokePath调用,那会有所帮助,但事实并非如此。
请参阅下面的讨论,了解我如何获得更正后的代码:
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextBeginPath(ctx);
CGContextMoveToPoint(ctx, 0, 0);
CGContextSetRGBStrokeColor(ctx,1,0,0,1);
CGContextAddLineToPoint(ctx, 100, 100);
CGContextStrokePath(ctx);
CGContextClosePath(ctx);
CGContextBeginPath(ctx);
CGContextMoveToPoint(ctx, 100, 100);
CGContextSetRGBStrokeColor(ctx,0,1,0,1);
CGContextAddLineToPoint(ctx, 200, 300);
CGContextStrokePath(ctx);
}
答案 0 :(得分:4)
我认为你没有做任何可怕的错误,只是给定图形上下文的CGContextStrokePath一次只能有一个RGBStrokeColor。因此,需要多次调用CGContextStrokePath,每种颜色一次。
每次调用CGContextAddLineToPoint()时,图形上下文的引用(不是副本)都会添加到该绘图操作堆栈中。当您最终调用CGContextStrokePath()时,将使用RGBStrokeColor的最后一个值。
如果你想使用具有相同图形上下文的多种颜色,那么你需要多次调用CGContextStrokePath()来改变调用之间的图形上下文中的RGBStrokeColor()的值。 AccelerometerGraph / GraphView.m中的Apple示例代码似乎也表明了这一点。