objective-c - 从 UIColor 获得稍微更亮和更暗的颜色

我希望能够将任何 UIColor 转换为渐变。我打算这样做的方式是使用 Core Graphics 绘制渐变。我想做的是获得一种颜色,让我们说:

[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0];

并得到一个 UIColor ,它更暗一些,更亮一些。有谁知道如何做到这一点?谢谢。

最佳答案

- (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];

编辑:正如@Anchu Chimala 指出的那样,为了获得最大的灵 active ,这些方法应该实现为 UIColor 类别。此外,从@Riley 的想法来看,最好让颜色按比例变暗或变亮,而不是添加或减去常数值。正如@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

https://stackoverflow.com/questions/11598043/

相关文章:

ios - 自定义 UITableView 标题部分

ios - AppDelegate 的用途是什么,我如何知道何时使用它?

iphone - UIWebView背景设置为Clear Color,但不透明

ios - 在 SwiftUI/Swift/Objective-C/Xamarin 中将底部边框线添

iphone - 指定的权利...配置文件。 (0xE8008016)。错误 iOS 4.2

ios - UILabel - 自动调整大小标签以适合文本?

objective-c - 是否可以在 Objective-C 中将 -init 方法设为私有(pr

objective-c - 为什么 NSInteger 变量在用作格式参数时必须转换为 long?

objective-c - 更改 NSView 的背景颜色的最佳方法

ios - UIView 周围的虚线边框