2014-01-10 3 views
2

В андроиде есть опция, в которой вы можете установить цвет на основе значения int. Есть ли в любом случае, что я могу использовать это значение или преобразовать это значение, чтобы установить его как UIColor в iOS? Например, это значение, -5242884 может быть использовано в android для установки цвета.ios Преобразование целочисленного цвета в значения uicolor или hex?

Из того, что мне удалось найти, является то, что iOS широко использует шестнадцатеричное значение или значение rgb для установки для UIColor. Но я не нашел никакой информации о моей проблеме здесь. В любом случае, я могу использовать значение int.

+0

Что означает отрицательное целое число представляет? – rmaddy

+0

На самом деле это значение цвета, которое можно установить на стороне android. В android я могу преобразовать это отрицательное целочисленное значение в шестнадцатеричное значение. Но я хотел знать, могу ли я преобразовать это значение в iOS или нет. –

+0

Тип int имеет 4 байта, имеет ли первый байт значение красного, второе-> зеленое значение, третье-> синее значение, last-> alpha? – KudoCC

ответ

9

Похоже, что целочисленное число, к которому вы ссылаетесь, является упакованным целым числом. См.: android color documentation. Вам нужно найти способ, чтобы преобразовать упакованную Int в шестнадцатеричном, а затем вы можете использовать этот макрос (получен here), который преобразует шестнадцатеричное число в UIColor:

#define HEXCOLOR(c) [UIColor colorWithRed:((c>>24)&0xFF)/255.0 green:((c>>16)&0xFF)/255.0 blue:((c>>8)&0xFF)/255.0 alpha:((c)&0xFF)/255.0] 

Я знаю, что это на самом деле не ответить на ваш вопрос но это может помочь вам сузить поиск.

Редактировать

Хорошо, так что я просто понял, что выше макрос делает решить вашу проблему. Просто дайте ему целочисленное представление, и он даст вам правильный UIColor. Мой тестовый код ниже:

UIColor *color = HEXCOLOR(-16776961); // Blue const from android link above 
const CGFloat *components = CGColorGetComponents(color.CGColor); 
NSString *colorAsString = [NSString stringWithFormat:@"%f,%f,%f,%f", components[0], components[1], components[2], components[3]]; 
NSLog(@"%@",colorAsString); // Prints 1.0 0.0 0.0 1.0 which corresponds to 0xff0000ff 

Я имел некоторую помощь от here.

Редактировать

Исправлен макрос ожидать правильных значений RGBA:

#define ANDROID_COLOR(c) [UIColor colorWithRed:((c>>16)&0xFF)/255.0 green:((c>>8)&0xFF)/255.0 blue:((c)&0xFF)/255.0 alpha:((c>>24)&0xFF)/255.0] 

предыдущий макрос ожидается RGBA в то время как Android цвета ИНТ дал ARGB.

+0

Спасибо ... Я ценю это. Я рассмотрю его –

+0

'UIColor * color = HEXCOLOR (-16776961);' Значение в 'color' возвращается как синее в android, но оно выглядит красным в iOS. = (Каким-то образом марка работала, но отсутствовала точность. –

+0

@IssacZH. Я думаю, что это связано с порядком значений RGBA.Цвет Android - это, вероятно, ARGB, тогда как UIColor - это RGBA, поэтому в этом случае в качестве переключателя были бы включены красные и синие. Измените макрос, чтобы поместить их в правильном порядке. Я отправлю редактирование на мой ответ. – nalyd88

Смежные вопросы