问题描述
有谁知道执行以下操作的正确方法:
我有一个生成路径的视图,我想用颜色或渐变(不同类型)填充它。
enum FillColor {
case color(_ color: Color)
case gradient(color1: Color,color2: Color)
}
在视图中,我有一条路径:
var body: some View {
GeometryReader { geometry in
Path { path in
...
}
}
}
然后我需要切换并执行以下操作:
switch color {
case .color(let c):
path.fill(c)
case .gradient(let c1,let c2):
let gradient = ...
path.fill(gradient)
}
我是否为 Path
创建变量?
但我也需要使用 GeometryReader
。
解决方法
所以我所做的就是将创建路径封装到一个函数中,然后使用它来避免代码重复。
我将路径作为 inout 参数传递,以便能够对其进行变异。
当然,这不是理想的解决方案..
GeometryReader { geometry in
switch color {
case .color(let c):
Path { path in createPath(&path,geometry: geometry) }
.fill(c)
case .gradient(let c1,let c2):
let gradient = LinearGradient(...)
Path { path in createPath(&path,geometry: geometry) }
.fill(gradient)
}
}