让我向您展示一些获得三个UIColors的色调,饱和度和亮度的结果。
[[UIColor redColor] getHue:&hue
saturation:&saturation
brightness:&brightness
alpha:&alpha];
hue = 1.0 saturatino = 1.0 brightness = 1.0 alpha = 0.0
[[UIColor whiteColor] getHue:&hue
saturation:&saturation
brightness:&brightness
alpha:&alpha];
hue = 0.0 saturatino = 0.0 brightness = 0.0 alpha = 0.0
[[UIColor blackColor] getHue:&hue
saturation:&saturation
brightness:&brightness
alpha:&alpha];
hue = 0.0 saturatino = 0.0 brightness = 0.0 alpha = 0.0
任何人都可以解释为什么色调,饱和度,白色和黑色的亮度相等?为什么alpha等于零?
我想在我的项目中做的是通过改变它的亮度从给定的颜色生成“更暗”的颜色:
亮度=亮度* 0.8;
它适用于任何颜色,但它从白色产生黑色。 (虽然我希望有一种灰色)。
原因是因为 +whiteColor
和 +blackColor
两者都返回灰度颜色空间中的颜色,这与HSB颜色空间不兼容。因此, -getHue:saturation:brightness:alpha:
实际上并没有修改参数。我想你会发现你已经准备好了 0.0
在调用该方法之前。如果你检查的返回值 -getHue:saturation:brightness:alpha:
它会告诉你它是否成功转换为HSB。
凯文巴拉德上面给出了关于问题原因的正确答案。我在我正在开发的应用程序中有类似的要求,除了我还想动态修改颜色的alpha。为了做到这一点,我创建了一个类别(UIColor + Modify),其中包含一个方法(参见下面的代码)。实现假设如果颜色不在RGB / HSB空间中,那么您正在寻找白色阴影。您应该可以轻松地将其调整为“倍增”亮度。
#import "UIColor+Modify.h"
@implementation UIColor (Modify)
-(UIColor*)setBrightness:(CGFloat)brightness alpha:(CGFloat)alpha {
CGFloat hue = 0.0F;
CGFloat saturation = 0.0F;
[self getHue:&hue saturation:&saturation brightness:nil alpha:nil])
// if the above fails then hue and saturation will still be 0.0F
// according to Apple's documentation <1>
return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:alpha];
}
@end
当我想要改变另一种颜色的亮度和alpha时,我会使用这种方法:
#import "UIColor+Modify.h"
...
UIColor brightColor = [UIColor redColor];
UIColor lessBrightSeeThroughColor = [someColor setBrightness:0.9F alpha 0.8F];
....
<1> UIColor文档