故事板中的白色颜色集和UIColor.whiteColor()有什么区别?

时间:2016-05-27 07:42:52

标签: ios xcode swift storyboard

对于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设置的值StoryboardUIColor.whiteColor()的值不同

调试结果:
故事板白色 - UIDeviceRGBColorSpace 1 1 1 1
UIColor.whiteColor() - UIDeviceWhiteColorSpace 1 1

我找到了解决方法,让我的代码按预期工作。

我真正的困惑是:

  • 这两个值之间有什么区别?
  • 为什么Xcode在故事板和代码中有两种不同的相同颜色值?
  • 这两种不同的白色颜色如何相互不同?

2 个答案:

答案 0 :(得分:3)

结果的变化差异不是因为使用的颜色(毕竟它们都是白色),而是因为使用的结果颜色空间 :( RGB和另一个是Device

设备颜色

设备颜色意味着人眼所感知的颜色的真实表示。与设备无关的色彩空间以白色参考点,黑色参考点和特定设备的伽玛值开始。 iOS Quartz将该信息转换为将源颜色空间的颜色转换为输出设备的颜色空间。设备颜色也是国际色彩联盟定义的标准。

  

ICC配置文件定义设备支持的色域   具有其他设备特性,以便可以使用此信息   准确地将一个设备的颜色空间转换为颜色   另一个空间。

<强> RGB

RGB是一个三维色彩空间,由构成给定颜色的红色,绿色和蓝色强度的不同值组成。它是计算机图形学中最常用的色彩空间,因为今天大多数每种彩色显示器都直接支持它。 RGB颜色空间取决于设备和添加剂。

  

信号传输到显示器正面的元素,   使它们以各种强度的红色,绿色和蓝色发光   (它们的组合构成了所需的色调,饱和度和   所需颜色的亮度)

iOS: Color and Color Spaces

答案 1 :(得分:2)

就可见颜色而言,没有区别。两者都是常规的白色。

但从技术上讲,在调试时,它们是两个不同的对象,它们使用的颜色空间不同。一个是使用RGB颜色空间创建的,所有通道都设置为其最大值。另一个是用白色空间(灰度)创建的,最大白色。在两个空格中,最后一个值是alpha值。

白色以下应该满足您的条件,因为它使用的是RGB色彩空间。

UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
  

为什么Xcode在故事板中有两种不同的相同颜色值   和代码?

这真的不容易回答。从故事板开始,即使您使用灰度滑块创建白色。它将其转换为内置的故事板白色,即RGB。这就是我猜的方式。