可以在SwiftUI渐变中为颜色添加“权重”吗?

时间:2020-06-07 03:06:23

标签: ios swift swiftui gradient

我正在使用颜色渐变作为我的应用程序的背景(在SwiftUI中)。 It is super simple and looks something like this

为此,我将背景设置为线性颜色渐变(缩写):

private var grade = Gradient(colors: [Color("Red"), Color("Blue")])

...

.background(LinearGradient(gradient: grade, startPoint: .top, endPoint: .bottom))

我希望当用户增加圆圈中的数字时(通过拖动小圆圈)渐变为“红移”,而当数值较小时,渐变为“蓝移”。

我尝试过的一件事是将颜色设置为一个很大的数组,其中一半是Color(“ Red”),另一半是Color(“ Blue”);然后我想我可以随着用户拖动来更改红色的数量;但是,这也会减少应用的渐变量(看上去更像是红色框和蓝色框,然后是渐变)。不过,它确实可以在较小的比例上工作,因此我将颜色设置为[Color(“ Red”),Color(“ Red”),Color(“ Blue”)],以显示我可能希望它在更大的外观下显示的内容号码:

enter image description here

我希望这种效果是连续的(或实际上是连续的)。

我希望这能说明我正在努力实现的目标,并一如既往地感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这是可能的解决方案。使用Xcode 11.4 / iOS 13.4进行了测试

注意:当然可以根据需要修改参数

demo

struct DemoGradientShift: View {
    private var grade = Gradient(colors: [.red, .blue])
    @State private var value: CGFloat = 50
    var body: some View {
        ZStack {
            VStack {
                Rectangle().fill(Color.red)
                Rectangle().fill(Color.blue)
            }
            Rectangle().fill(LinearGradient(gradient: grade, startPoint: .top, endPoint: .bottom))
                .offset(x: 0, y: 5 * (50 - value))
            Slider(value: $value, in: 1...100)
        }
        .edgesIgnoringSafeArea(.all)
    }
}
相关问题