从UIColor获得RGBA Color Components的更好方法是什么?

时间:2012-06-28 16:20:42

标签: iphone objective-c cocoa-touch

是否有更快(或更好)的方法从UIColor获取[RGBA]颜色组件?这周围似乎有很多变化(有些在这里,所有基本上与我在这里所做的相似)我只是好奇,如果有一个替代,因为它似乎有点“缺乏”,因为其他一切都是如此完整而深思熟虑。

if([eachKey isEqualToString:@"NSColor"]) {
    UIColor *newColor = [attrs valueForKey:eachKey];
    //NSLog(@"COLOR: %@", newColor);
    CGColorRef colorRef = [newColor CGColor];
    //NSLog(@"%@", colorRef);
    int numComponets = CGColorGetNumberOfComponents(colorRef);
    if(numComponets == 4) {
        const CGFloat *components = CGColorGetComponents(colorRef);
        CGFloat compR = components[0];
        CGFloat compG = components[1];
        CGFloat compB = components[2];
        CGFloat compA = components[3];

        //NSLog(@"R:%f G:%f B:%f, A:%f", compR, compG, compB, compA);
    }
}

我不是在寻找(我认为我有上面的长版本)我想知道这是否是您现在应该这样做的方式?

3 个答案:

答案 0 :(得分:16)

CGFloat r, g, b, a;    
[MyColor getRed: &r green:&g blue:&b alpha:&a];

需要iOS 5+。

答案 1 :(得分:2)

检查班级参考中的this方法。

答案 2 :(得分:1)

- (BOOL)getRed:(CGFloat *)red 
         green:(CGFloat *)green 
          blue:(CGFloat *)blue 
         alpha:(CGFloat *)alpha

上述方法不可靠,它会为[UIColor whiteColor](或其他灰度color)返回NO。

使用

if(numComponets == 5) {

而不是

if(numComponets == 4) {

来自api doc:

The size of the array is one more than the number of components of the color 
space for the color.