0

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

(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];
}

}

4

1 回答 1

1

CGContextRef bluecontext = UIGraphicsGetCurrentContext();添加后CGContextSaveGState(bluecontext);CGContextRestoreGState(bluecontext);绘制贝塞尔路径后。

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

使用CGContextSaveGStateCGContextRestoreGState保存之前的上下文,绘制,然后将上下文恢复原样加上您完成的绘图。

于 2012-12-14T15:21:02.320 回答