drawRect和Interface Builder之间的颜色差异?

8
简单来说,我在界面生成器中有两个视图,其中一个使用界面生成器中的RGB滑块设置为颜色99,99,99。
另一个视图通过编程实现某种形状并着色。我使用以下代码填充该视图:
//Obviously, this is in drawRect.
[[UIColor leadColor] set];
CGContextEOFillPath(myContext);

//And this is a category on UIColor
+ (UIColor *)leadColor {
    return [UIColor colorWithWhite:99/255.0 alpha:1.0];
}

结果: enter image description here 为什么存在这样的差异?
编辑:(不必要的`drawRect`代码已被删除)
编辑2:
所以,我在骗自己……“Interface Builder将RGB 99,99,99显示为80,80,80。我敢打赌它将数字偏移了19个。” >>.>>……一个绝望的人使用Xcode会想出这样疯狂的想法……结果是: Perfect!! 完美!但是,为什么?又是Xcode的错误吗?在过去的一个月中,我发现了大约10个这样的错误……

请发布完整的drawRect代码,因为这两行与UIGraphicsGetCurrentContext一起使用时无法将颜色绘制在视图上。 - A-Live
感谢您测试它。只需将 CGContextEOFillPath(myContext); 替换为 CGContextFillRect。更简单,只是为了测试。 - Mazyod
1
你试过使用 [UIColor colorWithRed:99/255.0 green:99/255.0 blue:99/255.0 alpha:1.0] 吗? - Clafou
@Mazyodж— и®ғ如дҢ•йѓҢдёҚиѓҢдҢүз”ЁCGContextFillRect(myContext, self.frame);гЂ‚иҮ·еЏ‘еёѓж‚Ёж­ӘењЁдҢүз”Ёзљ„д»Әз ЃгЂ‚ - A-Live
注意:我有一些非常有趣的信息。在你们尝试其他事情之前,让我先发布它们。 - Mazyod
2个回答

22

1
谢谢你。我没有想到在IB中这样做。 - CVertex
我也遇到了同样的问题,甚至用 Fireworks 测试了颜色 jejej。 - Frederic Yesid Peña Sánchez
谢谢!对我也管用! - Bruno

1

colorWithWhite 使用 灰度空间,而在灰度空间中,99 的颜色并不对应 RGB 空间中的 (99,99,99)。

因此,为了获得与 Interface Builder 中相同的结果,您需要使用 RGB 空间。请将您对 colorWithWhite 的调用替换为以下内容:

[UIColor colorWithRed:99/255.0 green:99/255.0 blue:99/255.0 alpha:1.0]

你说的很有道理,但事实并非如此。我上传的截图有两种不同的灰色,一个是由drawRect + leadColor绘制的,颜色为RGB 99,99,99。(即colorWithWhite与您提供的代码相同。但我测试过了,没有用)。然而,在IB中设置的颜色显示为RGB 80,80,80。 - Mazyod
奇怪!如果你在文本编辑器中打开.xib文件并查找颜色值,你会看到什么? - Clafou
<object class="NSColor" key="IBUIBackgroundColor"> <int key="NSColorSpace">2</int> <bytes key="NSRGB">MC40NjI3NDUwOTggMC40NjI3NDUwOTggMC40NjI3NDUwOTgAA</bytes> </object> .. 对我来说毫无意义。 - Mazyod
虽然您在空格问题上是正确的,但这是颜色空间的问题。 - Frederic Yesid Peña Sánchez

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