如何在 SwiftUI 中定义结构属性以接受线性或角度渐变?
Posted
技术标签:
【中文标题】如何在 SwiftUI 中定义结构属性以接受线性或角度渐变?【英文标题】:How do I define a struct property to accept Linear or Angular gradients in SwiftUI? 【发布时间】:2021-12-30 06:57:08 【问题描述】:我想创建一个可以接受线性或角度渐变作为属性的视图。虽然两种渐变都符合 ShapeStyle,但我无法用它定义属性类型。
如果视图只接受一个 LinearGradient,则如下所示:
struct NewView: View
var fill: LinearGradient
init(fill: LinearGradient = LinearGradient(gradient: Gradient(colors: [Color.green, Color.blue]), startPoint: .top, endPoint: .bottom)
self.fill = fill
var body: some View
Circle()
.stroke(fill, style: StrokeStyle(lineWidth: 25))
理想情况下,它会接受填充属性中的任何一个渐变,而不需要任何其他属性。
【问题讨论】:
【参考方案1】:我最终使用了带有两个初始化块的 AnyShapeStyle 类型,如下所示:
struct NewView: View
var fill: AnyShapeStyle
init(fill: LinearGradient = LinearGradient(gradient: Gradient(colors: [Color.green, Color.blue]), startPoint: .top, endPoint: .bottom)
self.fill = AnyShapeStyle(fill)
init(fill: AngularGradient = AngularGradient(colors: [.green, .blue], center: .center)
self.fill = AnyShapeStyle(fill)
var body: some View
Circle()
.stroke(fill, style: StrokeStyle(lineWidth: 25))
【讨论】:
【参考方案2】:设置ShapeStyle
约束。
struct NewView<Style: ShapeStyle>: View
var fill: Style
init(fill: Style)
self.fill = fill
var body: some View
Circle()
.stroke(fill, style: StrokeStyle(lineWidth: 25))
【讨论】:
以上是关于如何在 SwiftUI 中定义结构属性以接受线性或角度渐变?的主要内容,如果未能解决你的问题,请参考以下文章