Т.е. я хочу знать значение синего. Как мне получить это из UIColor?Как получить доступ к цветным компонентам UIColor?
ответ
Класс UIColor не содержит информации о цветовых компонентах. Вместо этого вы должны получить компоненты из своего CGColor. Обратите внимание, что количество компонентов зависит от цветового пространства, используемого в CGColorRef.
Этот код печатает компоненты для синего цвета:
UIColor* color = [UIColor blueColor];
int n = CGColorGetNumberOfComponents(color.CGColor);
const CGFloat *coms = CGColorGetComponents(color.CGColor);
for (int i = 0; i < n; ++i)
NSLog(@"%f", coms[i]);
Я просто смотрю на эту проблему ранее этим утром. Я не знаю, почему UIColor настолько неполна по сравнению с NSColor. В любом случае, я нашел эту полезную категорию для UIColor: Accessing UIColor Components
Слишком плохо, что код github устарел, и разработчик не отвечает к отчетам об ошибках; это хорошая категория. – TigerCoding
Просто сделал категорию для этого.
NSLog(@"%f", [UIColor blueColor].blue); // 1.000000
идет что-то вроде:
typedef enum { R, G, B, A } UIColorComponentIndices;
@implementation UIColor (EPPZKit)
-(CGFloat)red
{ return CGColorGetComponents(self.CGColor)[R]; }
-(CGFloat)green
{ return CGColorGetComponents(self.CGColor)[G]; }
-(CGFloat)blue
{ return CGColorGetComponents(self.CGColor)[B]; }
-(CGFloat)alpha
{ return CGColorGetComponents(self.CGColor)[A]; }
@end
Часть eppz!kit
с более UIColor goodies.
Полезная ссылка для получения дополнительной информации: http://arstechnica.com/apple/guides/2009/02/iphone-development-accessing-uicolor-components.ars – Jim