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

在UIColor iOS 5中有这个方法:

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

但我不明白我是如何在代码中使用它。 当然,我不需要说明这些组件中的每一个,如果我正在寻求从UIColor中得到这些?

 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); 

将logging0.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? } 

请注意,这四个参数是指向 CGFloat指针 ,而不仅仅是值。 这是标准C通过引用。 另请参阅以下堆栈溢出问题:

  • 重写一个返回的指针到输出参数
  • 在Objective-C中使用传递引用
  • 传出参数

举个例子:

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