如何获得正确的颜色格式

时间:2014-01-23 11:24:02

标签: ios objective-c

在我的编辑器中我有一个标签,在UITapGestureRecognizer上我需要获取文本的文本颜色

NSLog(@"Fontcolor---- %@",sanlabel.textColor);

但这段代码还给我了

UIDeviceRGBColorSpace 0.686275 1 1 1

如何以正确的格式获取颜色代码,以便我可以将其作为

UIColorFromRGB(0X2c3836)

3 个答案:

答案 0 :(得分:0)

您可以使用此方法(取自here):

- (NSString *) htmlFromUIColor:(UIColor *)_color {

if (CGColorGetNumberOfComponents(_color.CGColor) < 4) {    
const CGFloat *components = CGColorGetComponents(_color.CGColor);    
_color = [UIColor colorWithRed:components[0] green:components[0] blue:components[0] alpha:components[1]];    
}

if (CGColorSpaceGetModel(CGColorGetColorSpace(_color.CGColor)) != kCGColorSpaceModelRGB) {    
return [NSString stringWithFormat:@"#FFFFFF"];    
}    
return [NSString stringWithFormat:@"#%02X%02X%02X", (int)((CGColorGetComponents(_color.CGColor))[0]*255.0), (int)((CGColorGetComponents(_color.CGColor))[1]*255.0), (int)((CGColorGetComponents(_color.CGColor))[2]*255.0)];

}

答案 1 :(得分:0)

我假设您正在设置标签的文本,这是某种颜色定义,然后您想知道哪个标签被点击了?

我认为这是错误的方法,更好的方法是使用标签的标签来索引颜色定义的数组。这样更快,允许您稍后更改标签的文本格式(可能用于国际化),而不会影响功能。

假设有3个标签;定义每个标签的颜色:

static unsigned _labelColours[3] = {
    0x2c3836, 0x2c3837, 0x2c3838
};

现在将3个标签的标签设置为100(比如说)。这可以在代码中或在IB内完成。

然后,当您想知道分配给标签的颜色是什么时,只需在操作方法中执行此操作:

- (IBAction)labelWasTouched:(id)sender {
    NSInteger tag = [sender tag];
    NSAssert(tag >= 100 && tag <= 102, @"Tag out-of-range");
    unsigned colour = _labelColours[tag - 100];
    UIColor *colourObj = UIColorFromRGB(colour);
}

答案 2 :(得分:0)

将UIDeviceRBGColorSpace中的每个值轻松乘以255.然后使用NSString :: stringWithFormat将值转换为带有%x的HEX。

此外:

int r, g, b, a;

r = (int)(0.686275 * 255);
g = b = 1*255;

NSString *hexStr = [NSString stringWithFormat:@"%x%x%x",r,g,b];