我如何使用“getHue:saturation:brightness:alpha:”?

时间:2011-11-25 05:50:45

标签: objective-c ios cocoa-touch uicolor

iOS 5中的UIColor中有这种方法:

- (BOOL)getHue:(CGFloat *)hue saturation:(CGFloat *)saturation brightness:(CGFloat *)brightness alpha:(CGFloat *)alpha

但我不明白我是如何在代码中使用它的。当然,如果我想要从UIColor那里得到它,我不需要说明每个组件吗?

2 个答案:

答案 0 :(得分:16)

CGFloat hue;
CGFloat saturation;
CGFloat brightness;
CGFloat alpha;

[aColor getHue:&hue 
    saturation:&saturation 
    brightness:&brightness 
         alpha:&alpha];    
//now the variables hold the values

getHue:saturation:brightness:alpha:返回一个bool,确定是否可以转换UIColor。

示例:

BOOL b = [[UIColor colorWithRed:.23 green:.42 blue:.9 alpha:1.0] getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];
NSLog(@"%f %f %f %f %d", hue, saturation, brightness, alpha, b);

将记录0.619403 0.744444 0.900000 1.000000 1,因为它有效

,而

BOOL b = [[UIColor colorWithPatternImage:[UIImage imageNamed:@"pattern.png"]] getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];
NSLog(@"%f %f %f %f %d", hue, saturation, brightness, alpha, b);

记录0.000000 0.000000 -1.998918 0.000000 0。最后的0是Bool,所以这是无效的,实际上是brightness can only range from 0.0 to 1.0,但这里有一些随机的废话。

结论

代码应该是

CGFloat hue;
CGFloat saturation;
CGFloat brightness;
CGFloat alpha;

if([aColor getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha]){
    //do what ever you want to do if values are valid
} else {
    //what needs to be done, if converting failed? 
    //Some default values? raising an exception? return?
}

答案 1 :(得分:8)

请注意,这四个参数是指针CGFloat s,而不仅仅是值。这是标准的C传递引用。另请参阅以下Stack Overflow问题:

举个例子:

CGFloat hue, saturation, brightness, alpha;
[myColor getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];
// hue, saturation, brightness, and alpha are now set