Objective C中UIColor转NSString

5
我需要将UIColor转换为带有颜色名称的NSString,例如:
[UIColor redColor];

应该变成

@"RedColor"

我已经尝试过[UIColor redColor].CIColor.stringRepresentation,但它导致编译器错误。


2
请参考这里的最高评分答案,它可能会有所帮助:https://dev59.com/zXI-5IYBdhLWcg3wpaF1 - Luke
你必须编写自己的方法才能实现你想要的功能。其他人提供的答案可能会给你类似于“1 0 0 1”或“UIDeviceRGBColorSpace 1 0 0 1”的东西。 - rdelmar
你想要获取这个颜色的名称吗?也就是说,你打算如何使用它? - rdelmar
2个回答

9

我来扩展一下@Luke链接答案的内容,它创建了一个CGColorRef以传递给CIColor:

CGColorRef colorRef = [UIColor grayColor].CGColor;  

您可以直接传递您正在使用的UIColor的CGColor属性,例如:
NSString *colorString = [[CIColor colorWithCGColor:[[UIColor redColor] CGColor]] stringRepresentation];

别忘了导入核心图像框架。

顺便提一下,从字符串快速简单地转换回UIColor的方法可能是这样的:

NSArray *parts = [colorString componentsSeparatedByString:@" "];
UIColor *colorFromString = [UIColor colorWithRed:[parts[0] floatValue] green:[parts[1] floatValue] blue:[parts[2] floatValue] alpha:[parts[3] floatValue]];

1
这将不会给他他所要求的“GrayColor”。 - rdelmar
2
我尝试了这个和链接,但它们都返回了rgb+alpha等效值。我想知道颜色的名称,所以[uicolor whitecolor]将返回白色而不是1 1 1 1。 - Alex

2
这是将UIColor转换为NSString的最简单方法:
- (NSString *)stringFromColor:(UIColor *)color
{
    const size_t totalComponents = CGColorGetNumberOfComponents(color.CGColor);
    const CGFloat * components = CGColorGetComponents(color.CGColor);
    return [NSString stringWithFormat:@"#%02X%02X%02X",
            (int)(255 * components[MIN(0,totalComponents-2)]),
            (int)(255 * components[MIN(1,totalComponents-2)]),
            (int)(255 * components[MIN(2,totalComponents-2)])];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接