Примечание: Есть небольшая ошибка в вашем.Вот отредактированная версия:
- (UIColor *)UIColorFromIntegerCode:(int)integerCode {
CGFloat b = (integerCode & 0x000000FF) / 255.0f;
CGFloat g = ((integerCode & 0x0000FF00) >> 8) / 255.0f;
CGFloat r = ((integerCode & 0x00FF0000) >> 16) / 255.0f;
return [UIColor colorWithRed:r green:g blue:b alpha:1.0f];
}
Объяснение:
& является побитовым оператором AND: Он принимает два числа и выполняет операцию ANDна каждом бите.Результирующий бит равен 1, если оба бита равны 1, в противном случае 0.
>> является оператором побитового сдвига вправо: Требуется два числа.Во-первых, это число, которое будет смещено.Второе - это места для смещения.
0x000000FF
- это шестнадцатеричное представление синего цвета.Выполнение побитового И между integerCode
и 0x000000FF
отфильтровывает синие биты из целочисленного кода и присваивает их плавающему значению b.
Аналогично 0x0000FF00
- это шестнадцатеричный зеленый и 0x00FF0000
- это шестнадцатеричный красный.
Обратите внимание на смещение FF
между тремя шестнадцатеричными значениями.
0x000000 FF
0x0000 FF 00 (смещено на 8 битправо)0x00 FF 0000 (сдвинуто на 16 бит вправо)
Оператор побитового сдвига вправо используется для регулировки этого сдвига битов.Наконец, отфильтрованное значение делится на 255, чтобы сделать его между 0 и 1. (255 - максимальное значение, которое может иметь конкретный цвет.)
После фильтрации цветов в r, g и b они передаются в UIColorметод создания UIColor.
Если вас больше интересуют подробности побитовых операторов, здесь - хороший ресурс.