2010-04-22 2 views

ответ

6

Класс 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]); 
+0

Полезная ссылка для получения дополнительной информации: http://arstechnica.com/apple/guides/2009/02/iphone-development-accessing-uicolor-components.ars – Jim

0

Я просто смотрю на эту проблему ранее этим утром. Я не знаю, почему UIColor настолько неполна по сравнению с NSColor. В любом случае, я нашел эту полезную категорию для UIColor: Accessing UIColor Components

+0

Слишком плохо, что код github устарел, и разработчик не отвечает к отчетам об ошибках; это хорошая категория. – TigerCoding

0

Просто сделал категорию для этого.

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.