iOS – Xcode模拟器上的颜色与设备上的颜色不同
概观
我的iPhone应用程序在模拟器(iMac)中的背景颜色看起来不同于设备上的颜色(iPhone 3GS)。
编辑(以下部分已添加)
以下是不同的:
- 故事板颜色(xib文件)
- 模拟器的颜色
- 设备颜色
我想我应该看看它在设备上的外观。
问题
- 这是其他开发者面临的常见问题,是否有匹配颜色(系统过程)的方法?
- 在不同版本的iPhone(3gs / 4 / 4s)或所有颜色上,颜色看起来会不同?
- 我错过了什么,有什么特定的颜色configuration文件,我应该使用?
- 有什么样的经验法则的RGB值的变化一定比例?
- 在iPhone 4和4S中,颜色匹配模拟器? (我没有iPhone4和4S,所以我不确定。)
感谢@jtbandesbuild议发送导致解决scheme的屏幕截图
我只是回答完整性的问题。
我遵循的步骤是:
- 在故事板上截图
- 以设备中的图像截图(使用邮件/照片stream回到您的mac)
- 使用颜色select器(Mac OS调色板的一部分)在这两个屏幕截图中select相同的点
- 记下在步骤3中select的点的RGB值(在Mac OS调色板上可用)
- 比较两个RGB值并查看差异
- 添加RGB偏移以匹配颜色。
我的RGB偏移量(不要盲目追随)
基于我的经验,我添加了下面的RGB值来获得我想要的颜色,这只是粗糙的,为我工作:
- 红+12
- 绿色+19
- 蓝色+16
不同的angular度(最好保持水平)
拿着电话在不同的angular度也给不同的色调,保持水平确实给的颜色
当前(截至3/17/14)CGColorSpace参考文件包含以下文本,它表示sRGB是iOS的本机设备色彩空间。
颜色空间和iOS:iOS不支持ColorSync,因此应在本地设备颜色空间中提供所有资源:sRGB。
正如其他人所指出的,这是一个色彩空间的问题。
需要执行两项任务:
- 使用sRGB色彩空间获取源颜色。
- 在Interface Builder中使用sRGB颜色空间设置颜色。
任务1
您可以使用Apple的Digital Color Meter
应用程序来使用Display in sRGB
选项中的Display in sRGB
来对所需的颜色进行采样,但输出非常有限。
另一个select是使用像SipIt
这样的应用程序(在App Store上免费提供,最后一次检查)。 通过执行以下操作,确保您在正确的色彩空间中进行采样:
Preferences -> General -> Color Profiles -> sRGB
你也可以设置你的输出格式(例如hexstring)。
任务2
在界面生成器中,打开颜色窗口,select第二个窗格,select“RGB滑块”。 然后点击cog图标selectsRGB颜色configuration文件。
完成后,将您的颜色值粘贴到Hex Color #
字段
你完成了! 现在你的颜色应该匹配。
我不以任何方式隶属于SipIt。 但是我已经使用了几年了,非常方便。 我会推荐给任何devise师。
iPhone确实使用颜色空间pipe理,所以如果你想要一个更“科学”的解决scheme,你可以创build自己的颜色空间,例如CGColorSpaceCreateCalibratedRGB
。 它在核心graphics层面虽然。
将RGB值转换为sRGB的更好方法是使用mac中的“Digital Color Meter”工具,只需选中“Display in sRGB”
然后在代码中使用sRGB值而不是RGB
使用这个工具,你可以find通用的RGB颜色,并将其直接设置为xcode作为RGB值
在您的应用中使用图像文件时,另一个更简单的解决scheme。 首先,将Xcode中的颜色空间设置为sRGB IEC61966-2.1并应用您的颜色。 然后,在将任何图片导入到应用程序之前,使用Mac上的ColorSync Utility将图像与sRGB IEC61966-2.1configuration文件进行匹配。 为我完美工作,我的背景现在完全符合我导入的图像。 希望这有助于某人。
我有一个类似的问题,特别是在我的项目中的绿色。 我的问题原来是,我有一些资产是在Illustrator中创build的,颜色设置为CMYK而不是RGB。 我不确定这是不是你的问题,但是对于那些未来绊倒这个问题的人可能会有帮助。 我将插图画家“文档颜色模式”更改为RGB,一切正常。
你可以使用这个网页在Xcode中的不同甲板的颜色。 例如Generic和Device Colors有所不同。
这是关于色彩空间 。
确保从sRGB
色彩空间中选取颜色,并通过从下拉菜单中selectsRGB IEC61966-2.1
在Interface Builder上复制其RGBA值。
如果您在一个颜色空间中select一种颜色,并在不同的颜色空间中生成颜色,则它将看起来不同,尽pipe已经复制了相同的RGBA值。
另外,请记住,当通过代码生成颜色时,使用UIColor(red:green:blue:alpha:)
,默认情况下会在sRGB
颜色空间中生成颜色。 这就是为什么使用这个方法非常方便(而不是Adobe RGB
, P3
或其他)。 另外, sRGB
是目前业界使用最多的标准。
有趣的事实:上面提到的UIColor
构造函数在Xcode8之后在sRGB
空间创build了颜色。 之前,该函数用于在Generic RGB
空间内创build它们。 这就是为什么它也可能导致混乱。
这是一个扩展的主题的资源: https : //medium.com/@volbap/working-efficiently-with-colors-in-xcode-bc4c58b16f9a