从UIColors获取RGB值来自Hex颜色

时间:2014-02-06 16:25:21

标签: ios objective-c uikit uicolor

尝试从UIColor检索RGB值。但是,-[UIColor getRed:blue:green:alpha]在我的情况下不起作用。该方法永远不会返回YES,我认为这意味着颜色不能转换为RGB。我认为这是因为我的UIColor是由Hex颜色生成的(例如:#CCCCCC)。

如何从iOS中基于十六进制的UIColors获取RGB值?

1 个答案:

答案 0 :(得分:4)

问题在于您提供的示例。颜色#CCCCCC是灰度颜色,意味着UIColor不是用RGB创建的,而是用灰色创建的。换句话说,它是使用UIColor colorWithWhite:alpha:创建的。由于使用与RGB不同的颜色模型创建UIColor,因此使用getRed:green:blue:alpha:返回NO。

你可以做的是: -

UIColor *color =  // your color
CGFloat red, green, blue, alpha;

if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {

    CGFloat white;
    if ([color getWhite:&white alpha:&alpha]) {
        red = green = blue = white;
    } else {
        NSLog(@"Uh oh, not RGB or greyscale");
    }
}

更新

从iOS 8开始,行为似乎发生了一些变化。使用UIColor colorWithWhite:alpha:可以获得使用UIColor getRed:green:blue:alpha:创建的颜色的RGB值。在早期版本的iOS中,这不起作用。因此需要我最初发布的代码。