如何修改UIColor的色调,亮度和饱和度?

s6l*_*A3I 12 iphone xcode uikit uicolor ios

让我们说我有一个UIColor

UIColor *color = [UIColor redColor];
Run Code Online (Sandbox Code Playgroud)

现在我想修改饱和度/色调/亮度,我该怎么做?我确实阅读了文档,但我仍然感到很困惑

我想修改我制作的UIColor([UIColor redColor])不会使用某些首选项启动新颜色.如何修改它保留原件.我知道这个colorWithHue:saturation:brightness:alpha:方法,我需要更新现有颜色的属性,保持红色.

nie*_*bot 20

您可以调用getHue:saturation:brightness:alpha:颜色,然后调整值,然后使用调整后的组件创建新颜色+[UIColor colorWithHue:saturation:brightness:alpha:]

CGFloat hue, saturation, brightness, alpha ;
BOOL ok = [ <color> getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha ] ;
if ( !ok ) { 
    // handle error 
}
// ... adjust components..

UIColor * newColor = [ UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:alpha ] ;
Run Code Online (Sandbox Code Playgroud)

  • 这可行,但它不符合您的要求它是相同的颜色对象.但你想要的是不可能的.UIColor是不可变的 - 因此您将始终必须创建一个新的颜色对象. (4认同)

amb*_*ght 7

这是UIColor您可能会觉得有用的快速扩展:

extension UIColor {

    func modified(withAdditionalHue hue: CGFloat, additionalSaturation: CGFloat, additionalBrightness: CGFloat) -> UIColor {

        var currentHue: CGFloat = 0.0
        var currentSaturation: CGFloat = 0.0
        var currentBrigthness: CGFloat = 0.0
        var currentAlpha: CGFloat = 0.0

        if self.getHue(&currentHue, saturation: &currentSaturation, brightness: &currentBrigthness, alpha: &currentAlpha){
            return UIColor(hue: currentHue + hue,
                           saturation: currentSaturation + additionalSaturation,
                           brightness: currentBrigthness + additionalBrightness,
                           alpha: currentAlpha)
        } else {
            return self
        }
    }
}
Run Code Online (Sandbox Code Playgroud)