我希望能把任何 colored颜色 变成渐变色.我打算这样做的方式是使用核心图形绘制渐变.我想做的是得到一种 colored颜色 ,比如:
[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0];
然后得到一种 colored颜色 ,深一些,浅一些.有人知道怎么做吗?非常感谢.
我希望能把任何 colored颜色 变成渐变色.我打算这样做的方式是使用核心图形绘制渐变.我想做的是得到一种 colored颜色 ,比如:
[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0];
然后得到一种 colored颜色 ,深一些,浅一些.有人知道怎么做吗?非常感谢.
- (UIColor *)lighterColorForColor:(UIColor *)c
{
CGFloat r, g, b, a;
if ([c getRed:&r green:&g blue:&b alpha:&a])
return [UIColor colorWithRed:MIN(r + 0.2, 1.0)
green:MIN(g + 0.2, 1.0)
blue:MIN(b + 0.2, 1.0)
alpha:a];
return nil;
}
- (UIColor *)darkerColorForColor:(UIColor *)c
{
CGFloat r, g, b, a;
if ([c getRed:&r green:&g blue:&b alpha:&a])
return [UIColor colorWithRed:MAX(r - 0.2, 0.0)
green:MAX(g - 0.2, 0.0)
blue:MAX(b - 0.2, 0.0)
alpha:a];
return nil;
}
这样使用:
UIColor *baseColor = // however you obtain your color
UIColor *lighterColor = [self lighterColorForColor:baseColor];
UIColor *darkerColor = [self darkerColorForColor:baseColor];
EDIT:正如@Anchu Chimala指出的那样,为了获得最大的灵活性,这些方法应该作为UIColor类别来实现.此外,根据@Riley的 idea ,将 colored颜色 适当地变深或变亮可能是一个更好的主意,而不是增加或减go 常量值.正如@jrturton所指出的,没有必要操作RGB组件;最好修改亮度属性本身.总而言之:
@implementation UIColor (LightAndDark)
- (UIColor *)lighterColor
{
CGFloat h, s, b, a;
if ([self getHue:&h saturation:&s brightness:&b alpha:&a])
return [UIColor colorWithHue:h
saturation:s
brightness:MIN(b * 1.3, 1.0)
alpha:a];
return nil;
}
- (UIColor *)darkerColor
{
CGFloat h, s, b, a;
if ([self getHue:&h saturation:&s brightness:&b alpha:&a])
return [UIColor colorWithHue:h
saturation:s
brightness:b * 0.75
alpha:a];
return nil;
}
@end