Значение 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. Вы передаете строку, поэтому она не работает.