UIColor из представления шестнадцатеричной строки - PullRequest
1 голос
/ 18 мая 2011

любой фрагмент для получения:

NSString *_s = @"#000000";

до:

[UIColor blackColor];

любая помощь высоко ценится, просто возился с уродливым кодом для этого: (

Ответы [ 3 ]

1 голос
/ 18 января 2013

Модифицированная версия - также принимает альфа-значение

#define UIColorFromRGBA(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF000000) >> 24))/255.0 green:((float)((rgbValue & 0xFF0000) >> 16))/255.0 blue:((float)((rgbValue & 0xFF00) >> 8 ))/255.0 alpha:((float)((rgbValue & 0xFF))/255.0)]
0 голосов
/ 18 декабря 2014

Я написал категорию на UIColor, которая выполняет это:

Создайте новую категорию Objective-C. В вашей шапке:

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

@interface UIColor (Hex)

+ (UIColor*)colorFromHex:(NSString*)hex;

@end

А в твоей реализации:

@implementation UIColor (Hex)

+ (UIColor*)colorFromHex:(NSString *)hex
{
    unsigned result = 0;
    NSScanner *scanner = [NSScanner scannerWithString:hex];

    [scanner setScanLocation:0];
    [scanner scanHexInt:&result];

    return UIColorFromRGB(result);
}

@end

Предполагается, что ваша шестнадцатеричная строка имеет формат 000000, но вы можете настроить ее в соответствии с вашими потребностями, чтобы учесть # (изменить [scanner setScanLocation:0] на [scanner setScanLocation:1]).

0 голосов
/ 18 мая 2011

Это работает для меня:

#define UIColorFromRGB(rgbValue) \
[UIColor \
colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \
green:((float)((rgbValue & 0x00FF00) >> 8))/255.0 \
blue:((float)(rgbValue & 0x0000FF))/255.0 \
alpha:1.0]

Используйте это как:

UIColorFromRGB(0x4c4c4c)
...