SwiftUI 在开关中填充视图
SwiftUI fill a View inside a switch
有谁知道执行以下操作的正确方法:
我有一个生成路径的视图,我想用颜色或渐变(它们是不同的类型)填充它。
为此,我有一个从父视图传递给视图的枚举:
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)
}
}
有谁知道执行以下操作的正确方法:
我有一个生成路径的视图,我想用颜色或渐变(它们是不同的类型)填充它。
为此,我有一个从父视图传递给视图的枚举:
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)
}
}