如何在LinearGradient初始值设定项中使用变量-SwiftUI

问题描述 投票:0回答:1

我试图在稍后使用cardGradient的结构内执行此操作。 “ 1a”和“ 1b”是素材资源文件夹中的颜色。

var color1 = "1a"
var color2 = "1b"

let cardGradient = LinearGradient(gradient: Gradient(colors: 
[Color(color1), Color(color2)]), startPoint: .leading, endPoint: .trailing)

无法在属性初始化程序中使用实例成员'color1';属性初始化程序在“自我”可用之前运行。

无法在属性初始化程序中使用实例成员'color2';属性初始化程序在“自我”可用之前运行

swiftui linear-gradients
1个回答
0
投票

我不确定在电话上创建LinearGradient的强度如何,但是如果这不是问题,您可以将LinearGradient设为计算变量:

var color1 = "1a"
var color2 = "1b"

let cardGradient: LinearGradient {
    LinearGradient(gradient: Gradient(colors: [Color(color1), Color(color2)]), startPoint: .leading, endPoint: .trailing)
}

[如果它占用大量计算资源,则可以将其设为可选(或为它提供默认值),然后在视图的.onAppear中进行设置,但随后必须使渐变为@State:] >

var color1 = "1a"
var color2 = "1b"
@State var cardGradient: LinearGradient?

var body: some View {
    VStack {
        // ... some views here
    }.onAppear {
        self.cardGradient = LinearGradient(gradient: Gradient(colors: [Color(color1), Color(color2)]), startPoint: .leading, endPoint: .trailing)
    }
}

请记住,如果颜色经常变化,这两种解决方案都不是特别理想,但是您不希望在颜色变化时进行渐变更新,但这听起来不像是您遇到的问题。如果您看到第一个选项出现滞后,请使用第二个选项。

© www.soinside.com 2019 - 2024. All rights reserved.