对于UIButton
,我在故事板中将其背景颜色设置为White Color
。我想切换按钮的属性,具体取决于我按钮的当前backgroundColor
。
func toggleButton(button: UIButton) {
if button.backgroundColor == UIColor.whiteColor() {
button.backgroundColor = UIColor.myDesiredColor()
button.tintColor = UIColor.whiteColor()
}else {
button.backgroundColor = UIColor.whiteColor()
button.tintColor = UIColor.myDesiredColor()
}
}
对button.backgroundColor == UIColor.whiteColor()
的检查永远不会返回true
,经过调试后,我发现White Color
设置的值Storyboard
与UIColor.whiteColor()
的值不同
调试结果:
故事板白色 - UIDeviceRGBColorSpace 1 1 1 1
UIColor.whiteColor()
- UIDeviceWhiteColorSpace 1 1
我找到了解决方法,让我的代码按预期工作。
我真正的困惑是:
答案 0 :(得分:3)
结果的变化差异不是因为使用的颜色(毕竟它们都是白色),而是因为使用的结果颜色空间 :( RGB
和另一个是Device
)
设备颜色
设备颜色意味着人眼所感知的颜色的真实表示。与设备无关的色彩空间以白色参考点,黑色参考点和特定设备的伽玛值开始。 iOS Quartz将该信息转换为将源颜色空间的颜色转换为输出设备的颜色空间。设备颜色也是国际色彩联盟定义的标准。
ICC配置文件定义设备支持的色域 具有其他设备特性,以便可以使用此信息 准确地将一个设备的颜色空间转换为颜色 另一个空间。
<强> RGB 强>
RGB是一个三维色彩空间,由构成给定颜色的红色,绿色和蓝色强度的不同值组成。它是计算机图形学中最常用的色彩空间,因为今天大多数每种彩色显示器都直接支持它。 RGB颜色空间取决于设备和添加剂。
信号传输到显示器正面的元素, 使它们以各种强度的红色,绿色和蓝色发光 (它们的组合构成了所需的色调,饱和度和 所需颜色的亮度)
答案 1 :(得分:2)
就可见颜色而言,没有区别。两者都是常规的白色。
但从技术上讲,在调试时,它们是两个不同的对象,它们使用的颜色空间不同。一个是使用RGB颜色空间创建的,所有通道都设置为其最大值。另一个是用白色空间(灰度)创建的,最大白色。在两个空格中,最后一个值是alpha值。
白色以下应该满足您的条件,因为它使用的是RGB色彩空间。
UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
为什么Xcode在故事板中有两种不同的相同颜色值 和代码?
这真的不容易回答。从故事板开始,即使您使用灰度滑块创建白色。它将其转换为内置的故事板白色,即RGB。这就是我猜的方式。