ios - 从从十六进制颜色派生的UIColors获取RGB值

标签 ios objective-c uikit uicolor

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

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

最佳答案

问题在于您给出的示例。颜色#CCCCCC是一种灰度颜色,表示UIColor不是用RGB创建的,而是用灰色创建的。换句话说,它是使用UIColor colorWithWhite:alpha:创建的。由于您的UIColor是使用不同于RGB的颜色模型创建的,因此使用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的早期版本中,此方法无效。因此,需要我最初发布的代码。

关于ios - 从从十六进制颜色派生的UIColors获取RGB值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21608422/

相关文章:

ios - 使用 NSMutableURLRequest 的字符串请求

ios - 如何创建 UIScrollView?

iphone - 如何在iOS应用程序中加载FNT格式的字体

ios - 获取随机 Firebase 数据库条目

iphone - RestKit GET 查询参数

c++ - UInt8 和 uint8_t 有什么区别

swift - 在 SwiftUI 类中调用包装的 UIViewController 函数时获取 nil

ios - AWS iOS Cognito - 如何检查用户池中的用户?

ios - fatal error : Index out of range, 由于反复按赞和心形按钮

iphone - 与 interactivePopGestureRecognizer 一起调整位置