Скорее всего, неправильное цветовое пространство.Я полагаю, что альфа-компонент цветового пространства градаций серого получается там, где, как вы думаете, должен быть зеленый компонент.
Я использую эту функцию для создания строки из UIColor, я сталкиваюсь только с цветовыми пространствами RGB и Grayscale, поэтому я просто интерпретирую каждый цвет с меньшим, чем4 (R + G + B + A) компоненты в градациях серого.
if (CGColorGetNumberOfComponents(color.CGColor) < 4) {
const CGFloat *components = CGColorGetComponents(color.CGColor);
color = [UIColor colorWithRed:components[0] green:components[0] blue:components[0] alpha:components[1]];
}
if (CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)) != kCGColorSpaceModelRGB) {
NSLog(@"no rgb colorspace");
// do seomthing
}
const CGFloat *components = CGColorGetComponents(color.CGColor);
NSString *colorAsString = [NSString stringWithFormat:@"%f,%f,%f,%f", components[0], components[1], components[2], components[3]];
Конечно, этот метод подходит не для всех случаев, вы должны принять его в соответствии с вашими требованиями.