CGContext:如果我更改了笔触颜色,则更改整个视图颜色

时间:2012-12-14 14:50:58

标签: iphone objective-c ios6

我使用不同的按钮来改变UIBezierPath曲线绘图中使用CGContext的笔触颜色,但是在改变颜色时,之前绘制的线条也会根据最后的笔触颜色改变颜色。但我不希望先前绘制的线条改变颜色。 任何帮助表示赞赏。 我使用了以下代码:

(void)drawRect:(CGRect)rect{

if(colorwith==1){
    CGContextRef bluecontext = UIGraphicsGetCurrentContext();
    CGContextBeginPath(bluecontext); // clears any previous path
    CGContextSetRGBFillColor(bluecontext, 0.2, 0.3, 0.5, .06);

    CGContextSetStrokeColorWithColor(bluecontext, [UIColor blueColor].CGColor);
    CGContextStrokePath(bluecontext); // draw blue line


for(UIBezierPath *_tempPath in _arrayForOperationPath)
{
  [_tempPath strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];      
}
    //[[UIColor blackColor]setStroke];
}
else if (colorwith==2){

    CGContextRef bluecontextt = UIGraphicsGetCurrentContext();
    CGContextBeginPath(bluecontextt); // clears any previous path
    CGContextSetRGBFillColor(bluecontextt, 0.2, 0.8, 0.7, .01);

    CGContextSetStrokeColorWithColor(bluecontextt, [UIColor redColor].CGColor);
    CGContextStrokePath(bluecontextt); 
          // [[UIColor redColor]setStroke];


for(UIBezierPath *_tempPath in _arrayForOperationPath)
{
  [_tempPath strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];      
}
    //[[UIColor blackColor]setStroke];
}

}

1 个答案:

答案 0 :(得分:1)

在您绘制bezier路径后CGContextRef bluecontext = UIGraphicsGetCurrentContext();添加CGContextSaveGState(bluecontext);CGContextRestoreGState(bluecontext);之后。

你的问题是每次上下文更新时都会调用drawRect ...所以每次你画一些东西。你在这里设置了线条颜色,但是之前绘制的路径不记得RGB..just alpha(如果我没记错的话)。

使用CGContextSaveGStateCGContextRestoreGState保存上一个上下文,绘制,然后恢复上下文,再加上您已完成的绘图。