Значение HEX в Objective-C

Я хочу создать UIColor из значения HEX. Но мой цвет - это NSString. Поэтому я реализую это решение: Как создать UIColor из шестнадцатеричной строки?

код:

#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]

А потом у меня (упростить):

NSString *myString = [[NSString alloc] initWithString:@"0xFFFFFF"];

Итак, когда я хочу вызвать макрос:

UIColor *myColor = UIColorFromRGB(myString);

Я получаю сообщение об ошибке: invalid operands to binary expression ('NSString *' and 'int')

Итак, я знаю, что мне нужно передать int, но как преобразовать NSString в int в этом случае? Конечно, [myString intValue]; здесь не работает.

Ответ 1

Вы можете использовать свой макрос непосредственно с шестнадцатеричными целыми числами:

UIColorFromRGB(0xff4433)

Или вы можете разобрать шестнадцатеричную строку в целое число, подобное этому:

unsigned colorInt = 0;
[[NSScanner scannerWithString:hexString] scanHexInt:&colorInt];
UIColorFromRGB(colorInt)

Ответ 2

Вы не можете сделать это стандартно, но посмотрите мою категорию на UIColor, у которой есть способ для этого.

Ваш макрос, который вы определили, ожидает, что это целое число, упакованное в формате RGB. Вы передаете строку, поэтому она не работает.