UIColorにはgetRed:green:blue:alpha:メソッドがあるのですが、このメソッドだとカラースペースがRGBAじゃない場合([UIColor whiteColor]とかが返す値はWAカラースペースになる)RGBAを取れなかったのでその辺をうまいことしてゴニョっと返してくれる関数を書いてみました。他にも処理すべきカラースペースがあるのかもしれませんので、ちゃんと変換してくれないようなら調べてください。
BOOL colorToRGBA(UIColor *color, CGFloat *r, CGFloat *g, CGFloat *b, CGFloat *a) { if ([color getRed:r green:g blue:b alpha:a]) { return YES; } CGFloat h; CGFloat s; CGFloat v; if ([color getHue:&h saturation:&s brightness:&v alpha:a]) { int inn = floorf(h / 60.0f); if (inn < 0) { inn *= -1; } CGFloat fl = (h / 60.0f) - inn; CGFloat p = v * (1 - s); CGFloat q = v * (1 - s * fl); CGFloat t = v * (1 - (1 - fl) * s); switch( inn ) { case 0: *r = v; *g = t; *b = p; break; case 1: *r = q; *g = v; *b = p; break; case 2: *r = p; *g = v; *b = q; break; case 3: *r = p; *g = q; *b = v; break; case 4: *r = t; *g = p; *b = v; break; case 5: *r = v; *g = p; *b = q; break; } return YES; } if (CGColorGetNumberOfComponents(color.CGColor) == 2) { const float *components = CGColorGetComponents(color.CGColor); *r = components[0]; *g = components[0]; *b = components[0]; *a = components[1]; } return NO; }