繁体   English   中英

SwiftUI:更改渐变颜色亮度

[英]SwiftUI: Change Color brightness in gradient

我正在尝试使用相同的颜色在一端使用亮度调节器来创建渐变。 我试过这个:

    let gradient = LinearGradient(
        colors: [Color.blue, Color.blue.brightness(0.1)],
        startPoint: .top, endPoint: .bottom)

不幸的是,这不会编译并出现以下错误: Cannot convert value of type 'some View' to expected element type 'Array<Color>.ArrayLiteralElement' (aka 'Color')

根据这个线程,我希望它能工作。 我怎样才能解决这个问题?

你不能在这里使用brightness(_:)修饰符。 它返回View而不是Color

如果要给Color增加亮度,可能需要UIKit的帮助,需要按如下方式实现。

extension Color {
    func adjust(hue: CGFloat = 0, saturation: CGFloat = 0, brightness: CGFloat = 0, opacity: CGFloat = 1) -> Color {
        let color = UIColor(self)
        var currentHue: CGFloat = 0
        var currentSaturation: CGFloat = 0
        var currentBrigthness: CGFloat = 0
        var currentOpacity: CGFloat = 0

        if color.getHue(&currentHue, saturation: &currentSaturation, brightness: &currentBrigthness, alpha: &currentOpacity) {
            return Color(hue: currentHue + hue, saturation: currentSaturation + saturation, brightness: currentBrigthness + brightness, opacity: currentOpacity + opacity)
        }
        return self
    }
}

然后你可以像这样使用它。

LinearGradient(
    colors: [
        Color.blue.adjust(brightness: 0.5),
        Color.blue,
        Color.blue.adjust(brightness: -0.5),
    ],
    startPoint: .top,
    endPoint: .bottom
)

您还可以将此初始值设定项Color(hue:saturation:brightness:opacity:)用于您的自定义颜色。

brightness修改器创建视图,而不是颜色。 一种可能的解决方案是将 Color 与 HSB 初始化程序一起使用,如下所示

let gradient = LinearGradient(
    colors: [Color.blue, Color(hue: 229/360, saturation: 0.98, brightness: 0.1)],
    startPoint: .top, endPoint: .bottom)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM