我正在尝试使用iPhone/Touch SDK绘制一些简单的线条。我希望能够更改线条的颜色,但是在实际调用CGContextStrokePath之前,调用CGContextSetRGBStrokeColor似乎不会影响使用CGContextAddLineToPoint绘制的线条。因此,如果我多次调用更改颜色,则只有在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);
}
最佳答案
我不认为您在做任何可怕的错误,只是给定Graphics Context的CGContextStrokePath一次只能具有一个RGBStrokeColor。结果,需要多次调用CGContextStrokePath,每种颜色一次。
每次调用CGContextAddLineToPoint()时,都会向该图形操作堆栈中添加对Graphics Context的引用(而不是副本)。当您最终调用CGContextStrokePath()时,将使用RGBStrokeColor的最后一个值。
如果要对同一Graphics Context使用多种颜色,则似乎需要对CGContextStrokePath()进行多次调用,以在两次调用之间更改Graphics Context上的RGBStrokeColor()的值。出现在AccelerometerGraph/GraphView.m中的Apple示例代码也表明了这一点。
关于cocoa-touch - 使用CGContextStrokePath更改颜色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/814196/