如何在 xib 的 xml 文件的 NSRGB 标签中编码十六进制颜色?

Posted

技术标签:

【中文标题】如何在 xib 的 xml 文件的 NSRGB 标签中编码十六进制颜色?【英文标题】:How to encode hexadecimal color in NSRGB tag of xml file of xib? 【发布时间】:2012-05-07 11:32:37 【问题描述】:

我的任务是使用其所有参数(例如背景颜色)动态创建 xib 文件。 我通过创建 xml 内容然后编写 xib 文件来创建 xib 文件。 我只能对其特定颜色进行编码,例如对于黑色 NSRGB 标签是 -

<object class="NSColor" key="IBUITextColor" id="1026485712">
    <int key="NSColorSpace">1</int>
    <bytes key="NSRGB">MCAwIDAAA</bytes>
</object>

对于红色 -

<object class="NSColor" key="IBUITextColor">
    <int key="NSColorSpace">2</int>
    <bytes key="NSRGB">MC45MzcyNTQ5NjUzIDAgMC4yMDM5MjE1ODYzAA</bytes>
</object>

我不知道如何将其他十六进制颜色代码 (#0000CD) 转换为这种编码颜色 NSRGB (MC45MzcyNTQ5NjUzIDAgMC4yMDM5MjE1ODYzAA)。我不知道为 NSRGB 颜色代码编码十六进制颜色的标准。

【问题讨论】:

【参考方案1】:

我打赌您列出的“红色”是 (239,0,52) 或 #EF0035。如果我是对的,我想我已经弄清楚了……

我正在使用 .NET 来执行此操作,但我认为您可以在 Objective-C 中找到它。

你会想要这样做:

将十六进制值转换为十进制值:

#0000CD --&gt; (0,0,205)

将每个十进制值除以 255 并保留最多 10 位:

(0,0,205) --&gt; (0,0,0.8039215686)

将这些值变成一个字符串,每个值用空格分隔(末尾没有空格):

0 0 0.8039215686

将其转换为字节数组:

48 32 48 32 48 46 56 48 51 57 50 49 53 54 56 54

在末尾添加一个“零”字节0

48 32 48 32 48 46 56 48 51 57 50 49 53 54 56 54 0

现在,只需将其转换为 base64 字符串。我对#0000CD 的结果是:

MCAwIDAuODAzOTIxNTY4NgA=

我认为最后的 = 只是一个占位符,但这不是我的专业领域。

注意:在第一个值(“MCAwIDAAA”)的末尾有一个额外的A,我还没弄清楚;你确定那是 3 A 而不是 2?

希望这会有所帮助!

【讨论】:

【参考方案2】:

正确答案是: 你应该只解码base64字节“MCAwIDAAA” 例如:

红色 MSAwIDAAA ----base64 解码---> 1 0 0

橙色 MSAwLjUgMAA ----base64 解码---> 1 0.5 0

你捕捉到颜色 RGB 值!

【讨论】:

以上是关于如何在 xib 的 xml 文件的 NSRGB 标签中编码十六进制颜色?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以直接编辑 XIB 文件的 XML?

使用xib开发界面

来自 xib 的 xml - 带键的字段名称 nil

XIB 和 NIB 文件有啥区别?

如何使用来自 xib 文件的任何子视图(在 xib 中创建)的多个副本

如何在swift中按下按钮从另一个xib文件加载另一个xib文件