我使用不同的按钮来改变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];
}
}
答案 0 :(得分:1)
在您绘制bezier路径后CGContextRef bluecontext = UIGraphicsGetCurrentContext();
添加CGContextSaveGState(bluecontext);
和CGContextRestoreGState(bluecontext);
之后。
你的问题是每次上下文更新时都会调用drawRect ...所以每次你画一些东西。你在这里设置了线条颜色,但是之前绘制的路径不记得RGB..just alpha(如果我没记错的话)。
使用CGContextSaveGState
和CGContextRestoreGState
保存上一个上下文,绘制,然后恢复上下文,再加上您已完成的绘图。