UIColor - getRed: ... - вызывает исключение - PullRequest
9 голосов
/ 06 ноября 2011

У меня есть следующий тестовый код:

CGFloat endRed, endGreen, endBlue, endAlpha;

[[UIColor greenColor] getRed:&endRed green:&endGreen blue:&endBlue alpha:&endAlpha];

, который я вызываю внутри метода drawRect для класса UIView. Этот код не выполняется за исключением

2011-11-06 02:29:28.671 Chartous[13457:b303] -[UICachedDeviceRGBColor getRed:green:blue:alpha:]: unrecognized selector sent to instance 0x4e7ea10
2011-11-06 02:29:28.673 Chartous[13457:b303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UICachedDeviceRGBColor getRed:green:blue:alpha:]: unrecognized selector sent to instance 0x4e7ea10'

Что здесь не так?

Ответы [ 3 ]

27 голосов
/ 06 ноября 2011

Попробуйте другой подход:

const CGFloat* components = CGColorGetComponents([[UIColor greenColor] CGColor]);
CGFloat red = components[0];
CGFloat green = components[1];
CGFloat blue = components[2];
CGFloat alpha = CGColorGetAlpha([[UIColor greenColor] CGColor]);
4 голосов
/ 06 ноября 2011

Этот метод доступен только в ios5 и новее.Вы запускаете его на более ранней версии iOS на симуляторе или устройстве?Я так полагаю, учитывая тег на ваш вопрос.

3 голосов
/ 06 ноября 2012

В случае монотонных цветов, количество компонентов равно 2, поэтому вам, к сожалению, нужна еще одна проверка

Например, [UIColor whitecolor] имеет только 2 компонента для альфы и цвета

size_t num = CGColorGetNumberOfComponents(cgPrevColor);
CGFloat r,g,b;
if(num==2) {
    r = g = b = components[0];
} else {
    r = components[0];
    g = components[1];
    b = components[2];            
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...