iOS SDK Interface Builder 的 RGB 滑块产生不同于 UIColor withRGB 的颜色

Posted

技术标签:

【中文标题】iOS SDK Interface Builder 的 RGB 滑块产生不同于 UIColor withRGB 的颜色【英文标题】:iOS SDK Interface Builder's RGB slider producing different color than UIColor withRGB 【发布时间】:2012-02-18 13:39:14 【问题描述】:

在界面生成器中,我将 UILabel 的颜色更改为此屏幕截图,红色为 255,绿色为 159,蓝色为 0,不透明度为 100%。这给出了橙色。

我以编程方式更改 UILabel 颜色,而不是使用此颜色将其更改回原始颜色...

timeLabel.textColor = [UIColor colorWithRed:255.0 green:159.0 blue:0.0 alpha:1.0];

它给出了这种颜色....

我认为应该是一样的,有人知道我做错了什么吗? 请帮忙,谢谢。

【问题讨论】:

【参考方案1】:

编辑:两年后,这篇文章仍然有一些因果报应和 cmets。将我的旧答案修正为更好的答案。

添加一个可以为 UIColor 输入 0 到 255 之间的函数的最明智和可重用的方法是创建一个自定义类别。更容易阅读,更容易调试,更容易让其他人贡献,并保持项目的整洁和结构化,因为它不仅仅是一个视图视图控制器。因此,添加以下文件,并将它们导入您的 m 文件中,无论您需要它们

UIColor+Extra.h

@interface UIColor (Extra)
+ (UIColor *)colorWithR:(uint)red G:(uint)green B:(uint)blue A:(uint) alpha
+ (UIColor *) randomColor;
+ (UIColor *) colorWithHex:(uint) hex;
@end

UIColor+Extra.m

#import "UIColor+Extra.h"

@implementation UIColor (Extra)

+ (UIColor *)colorWithR:(uint)red G:(uint)green B:(uint)blue A:(uint) alpha

  return [UIColor colorWithRed:red/255.0f green:green/255.0f blue:blue/255.0f alpha:alpha/100.f];


+ (UIColor *) randomColor

    CGFloat red =  (CGFloat)random()/(CGFloat)RAND_MAX;
    CGFloat blue = (CGFloat)random()/(CGFloat)RAND_MAX;
    CGFloat green = (CGFloat)random()/(CGFloat)RAND_MAX;
    return [UIColor colorWithRed:red green:green blue:blue alpha:1.0];

+ (UIColor *) colorWithHex:(uint) hex

    int red, green, blue, alpha;

    blue = hex & 0x000000FF;
    green = ((hex & 0x0000FF00) >> 8);
    red = ((hex & 0x00FF0000) >> 16);
    alpha = ((hex & 0xFF000000) >> 24);

    return [UIColor colorWithRed:red/255.0f green:green/255.0f blue:blue/255.0f alpha:alpha/255.f];

@end

【讨论】:

感谢宏并建议将它们放在哪里:)。这些宏将使代码更易于阅读,并采用在其他程序中创建的 RGB 颜色。 我会谨慎使用宏,因为类扩展或本地方法更安全。使用 .pch 是非常可怕的,我会给你一个 -1 的结果。 .pch 是一种通过允许编译器优化公共头文件的解析来加速编译的设备。使用它作为传播可能需要或可能不需要的宏的方式在小型项目中是不必要的,而在其他任何事情中都是可憎的。 (咆哮) 有效评论,@GordonDove,它根本不被视为咆哮。在 2012 年 2 月,我可能会将这个答案作为宏添加到 pch 文件中,但今天,幸运的是我知道得更好,非常感谢 SO 的一些有见地的 cmets 和答案。由于这个答案仍然给我 SO-karma,我可能应该添加一个更好、更精致的答案......【参考方案2】:
timeLabel.textColor = [UIColor colorWithRed:255/255.0f green:159.0/255.0f blue:0.0/255.0f alpha:1.0];

【讨论】:

您或许可以添加一些解释,而不仅仅是一个未格式化的代码示例 UIColor 只取从 0 到 1 的属性 这仍然产生了不同的颜色。 我只是想澄清一下。我已经在代码中使用了这个正确的方法,但它仍然对我不起作用。我仍然在经历不同的颜色渲染。然后我发现这是一个COLOR SPACE 问题。现在我使用Apple RGB 作为色彩空间。 :D 查看链接,它真的很有帮助。【参考方案3】:

在 Xcode 的蜡笔调色板中重现颜色的一种非常简单的方法是使用此链接 https://github.com/rob-brown/RBCategories/blob/master/UIColor+RBExtras.m

它允许像这样的蜡笔颜色....UIColor *ThisColor = [UIColor blueberryCrayonColor];

【讨论】:

【参考方案4】:

尝试设置为“设备 RGB”——这对我有用

【讨论】:

以上是关于iOS SDK Interface Builder 的 RGB 滑块产生不同于 UIColor withRGB 的颜色的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 4.2 + iOS6 = Interface Builder 错误

Interface builder和iphone sdk

iPhone SDK 3,Interface Builder:是不是可以从一组选定元素中取消选择一个元素?

iOS Update Interface Builder视图框架基于约束

iOS null Interface Builder 对象

iOS Interface Builder 中的架构方法