Как преобразовать UIColor в шестнадцатеричную строку?

У меня есть проект, где мне нужно хранить значения RGBA UIColor в базе данных в виде 8-символьной шестнадцатеричной строки. Например, [UIColor blueColor] будет @ "0000FFFF". Я знаю, что могу получить значения компонентов так:

CGFloat r,g,b,a;
[color getRed:&r green:&g blue: &b alpha: &a];

но я не знаю, как перейти от этих значений к шестнадцатеричной строке. Я видел много сообщений о том, как идти в другую сторону, но ничего не работает для этого преобразования.

Ответ 1

Сначала сначала преобразуйте ваши поплавки в значения int, а затем отформатируйте с помощью stringWithFormat:

    int r,g,b,a;

    r = (int)(255.0 * rFloat);
    g = (int)(255.0 * gFloat);
    b = (int)(255.0 * bFloat);
    a = (int)(255.0 * aFloat);

    [NSString stringWithFormat:@"%02x%02x%02x%02x", r, g, b, a];

Ответ 2

Вот так. Возвращает NSString (например, ffa5678) с шестнадцатеричным значением цвета.

- (NSString *)hexStringFromColor:(UIColor *)color
{
    const CGFloat *components = CGColorGetComponents(color.CGColor);

    CGFloat r = components[0];
    CGFloat g = components[1];
    CGFloat b = components[2];

    return [NSString stringWithFormat:@"%02lX%02lX%02lX",
            lroundf(r * 255),
            lroundf(g * 255),
            lroundf(b * 255)];
}