我的应用仅适用于iOS 8
我正在使用XCode 6.1.1
。
如果我在故事板中设置颜色(在Bar Tint
部分设置Navigation Bar
属性)
所需的颜色是:
56 186 145
我使用Core coding utilities来获取我的颜色的浮动值。
按代码:
let backgroundColor = UIColor(red: 0.22, green: 0.729, blue: 0.569, alpha: 1.0)
self.navigationController!.navigationBar.barTintColor = backgroundColor
self.navigationController!.navigationBar.translucent = false
通过故事板设置的颜色与原始RGB相同。
修改
我尝试使用来自故事板的let backgroundColor = UIColor(red: 0.255, green: 0.769, blue: 0.635, alpha: 1.0)
和rgb:65 196 162
基于@siejkowski评论,但我得到了这些颜色:
按代码:
通过故事板:
为什么?
答案 0 :(得分:12)
您观察到的颜色差异有两个原因。
UIColor
时,它将返回 RGB(通用RGB)价值观。因此,当您从Storyboard更改颜色时,RBG类型的值会有所不同。要在故事板中获得 RGB滑块的精确RGB值更改类型。
点击 RGB滑块选项正好的“设置”图标。它将显示一个弹出菜单 - 选择 Generic RGB 选项。
现在您可以观察RGB值
的图像56 186 145
现在改为
49 175 126
所以这些是代码的欲望值。
在代码中,您传递给出参数的向上舍入值,如下面一行
UIColor(red: 0.22, green: 0.729, blue: 0.569, alpha: 1.0)
因此它会对颜色代码的每个像素进行一次小的更改。我建议你将这个值除以255
,然后对编译器进行向上计算。这将为您提供所需的色彩准确度。
现在,对于新值,更新代码将是:
let backgroundColor = UIColor(red: 49.0/255.0, green: 175.0/255.0, blue: 126.0/255.0, alpha: 1.0)
self.navigationController!.navigationBar.barTintColor = backgroundColor
self.navigationController!.navigationBar.isTranslucent = false
答案 1 :(得分:2)
您会看到颜色的差异,因为它们是使用相同的RGB值设置的,但是在不同的颜色空间中。
UIColor,从代码设置时,从sRGB空间解释值,如下所示:https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGColorSpace/index.html
但是,默认情况下,Storyboard颜色选择器似乎使用原生值RGB。你需要在两者之间进行转换。您可以通过单击 Colors 选项卡中 RGB Sliders 列表选择器旁边的设置图标,在Storyboard颜色选择器中执行此操作。原始RGB值在 Color LCD 设置下设置,sRGB值当然在 sRGB 下。
执行此操作时,原始RGB空间中的56 186 145
似乎在sRGB空间中为73 186 141
。所以你的代码必须是:
let backgroundColor = UIColor(red: 0.286, green:0.729, blue:0.553, alpha:1.0)
答案 2 :(得分:1)
当我尝试从故事板/界面构建器(在XCode 6.3.2上)将颜色空间更改为 GenericRGB 时,XCode不会保存更改。因此,如果我从“界面”构建器重新打开颜色,则颜色空间始终为 sRGBIEC61966-2.1。
所以我提出了一个可能对其他人有用的不同解决方案: 使用Mac OS默认应用程序“ ColorSync Utility”我使用了计算器并将我的颜色值从 GenericRGB 转换为 sRGBIEC61966-2.1 。然后我将转换后的值设置为Interface构建器,并获得与以编程方式获取它的结果相同的结果!