改变CGContext的背景颜色

6

我是一个初学者,对于CGContext并不熟悉。我正在尝试通过跟随一个简单的触摸绘画和草图教程(http://blog.effectiveui.com/?p=8105)来理解它。

然而,当我尝试更改CGContext的背景颜色时,我遇到了困难。

我是这样初始化context的:

 - (BOOL) initContext:(CGSize)size {
     int bitmapBytesPerRow;
     bitmapBytesPerRow = (size.width * 4);
     cacheContext = CGBitmapContextCreate (nil, size.width, size.height, 8, bitmapBytesPerRow, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaNoneSkipLast);
     CGContextSetRGBFillColor(cacheContext, 1, 1, 1, 1);
     return YES;
 }

可以像这样更改描边颜色和宽度:

UIColor *color = [UIColor whiteColor];
CGContextSetStrokeColorWithColor(cacheContext, [color CGColor]);
CGContextSetLineCap(cacheContext, kCGLineCapRound); 
CGContextSetLineWidth(cacheContext, 4);

但是,当我尝试使用CGContextSetRGBFillColor(cacheContext,1,1,1,1);将背景颜色从黑色更改(无论是在初始化部分还是在绘制/描边设置部分),都没有效果。 有人能帮我指出正确的方法或正确的调用吗?非常感谢您的时间!

可能重复:https://dev59.com/THE85IYBdhLWcg3w3Xlp - Manlio
1个回答

23

你不能仅仅设置颜色并希望环境使用新的颜色进行填充。你需要实际上将该颜色绘制到环境中。在init方法中,设置填充颜色后,可以尝试使用以下内容绘制:

CGContextFillRect(cacheContext, (CGRect){CGPointZero, size});

相关的是,上下文默认情况下不是黑色,而是透明的颜色。如果你的上下文没有 alpha 通道,那么它最终会变成黑色,但是如果你的上下文具有 alpha 通道,并且你看到的是黑色,则表示你正在将输出渲染在黑色背景之上(或者,作为替代方案,你将透明图像放入具有 opaque 标志设置为 true 的层中,CoreAnimation 最终会将其绘制在黑色之上)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接