And*_*rew 2 cocoa-touch objective-c uicolor ios
iOS 5中的UIColor中有这种方法:
- (BOOL)getHue:(CGFloat *)hue saturation:(CGFloat *)saturation brightness:(CGFloat *)brightness alpha:(CGFloat *)alpha
Run Code Online (Sandbox Code Playgroud)
但我不明白我是如何在代码中使用它的.当然,如果我想从UIColor那里得到它,我当然不需要说明每个组件?
Vik*_*ica 16
CGFloat hue;
CGFloat saturation;
CGFloat brightness;
CGFloat alpha;
[aColor getHue:&hue
saturation:&saturation
brightness:&brightness
alpha:&alpha];
//now the variables hold the values
Run Code Online (Sandbox Code Playgroud)
编辑
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);
Run Code Online (Sandbox Code Playgroud)
将记录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);
Run Code Online (Sandbox Code Playgroud)
日志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?
}
Run Code Online (Sandbox Code Playgroud)
请注意,这四个参数是指针到CGFloatS,而不仅仅是值.这是标准的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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4472 次 |
| 最近记录: |