iPhone CGContext:绘制两条不同颜色的线条

pho*_*ddy 11 iphone line draw cgcontext

我在使用带有iPhone应用程序的CGContext时遇到了一些麻烦.我试图绘制几条不同颜色的线条,但所有的线条总是最终具有最后使用的颜色.我尝试了几种方法,但并不幸运.

我设置了一个小样本项目来处理这个问题.这是我的代码,我在drawRect方法中使用.我想画一条红线和一条蓝线:

- (void)drawRect:(CGRect)rect{
    NSLog(@"drawrect!");
    CGContextRef bluecontext = UIGraphicsGetCurrentContext(); 
    CGContextSetLineWidth(bluecontext, 2.0);
    CGContextSetStrokeColorWithColor(bluecontext, [UIColor blueColor].CGColor);
    CGContextMoveToPoint(bluecontext, 1, 1);
    CGContextAddLineToPoint(bluecontext, 100, 100);
    CGContextSetStrokeColorWithColor(bluecontext, [UIColor redColor].CGColor);
    CGContextAddLineToPoint(bluecontext, 200, 100);
    CGContextStrokePath(bluecontext);
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

dra*_*ard 22

在第二次设置笔触颜色之前插入此代码:

CGContextStrokePath(bluecontext);
CGContextBeginPath(bluecontext);
Run Code Online (Sandbox Code Playgroud)

所有AddLine和AddOther调用都在构建路径.使用最近设置的颜色和其他属性,使用StrokePath之类的调用绘制路径.您正在尝试绘制两个单独的路径,因此必须为每个路径调用Begin和Stroke.开始绘图时,Begin是隐含的,尽管自己调用它并没有什么坏处.绘图的基本流程是:

CGContextBeginPath(bluecontext); // clears any previous path
// add lines, curves, rectangles, etc...
CGContextStrokePath(bluecontext); // renders the path
Run Code Online (Sandbox Code Playgroud)

  • 是的,对于每次颜色变化,您必须绘制路径并清除它.您可以在相同的上下文中完成所有操作. (2认同)

fya*_*sar 13

多数民众赞成你所需要的.

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, rect);
CGContextSetLineWidth(context, 2.0);

CGContextBeginPath(context);
CGContextSetStrokeColorWithColor(context, [UIColor orangeColor].CGColor);
CGContextMoveToPoint(context, 1, 1);
CGContextAddLineToPoint(context, 100, 100);
CGContextStrokePath(context); // and draw orange line}

CGContextBeginPath(context);
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
CGContextMoveToPoint(context, 100, 100);
CGContextAddLineToPoint(context, 200, 100);     
CGContextStrokePath(context); // draw blue line
Run Code Online (Sandbox Code Playgroud)