如何在LinearGradient初始化程序-SwiftUI

时间:2019-10-15 01:13:15

标签: swiftui linear-gradients

我试图在稍后使用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';   属性初始化程序在“自我”可用之前运行

//

  

解决方案:感谢您的帮助!

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

VStack {
     // ... some views here
}
.background(LinearGradient(gradient: Gradient(colors: 
[Color(color1), Color(color2)]), startPoint: .leading, endPoint: .trailing))

1 个答案:

答案 0 :(得分: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中进行设置,但随后您必须使渐变{{ 1}}:

@State

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