是否可以在不创建子视图的情况下动画化路径?
例如:
struct ContentView: View {
@State private var end = 0.0
var body: some View {
VStack {
Button("Press me") {
withAnimation {
end += 100
}
}
Path { path in
path.move(to: .zero)
path.addLine(to: CGPoint(x: end, y: end))
}
.stroke()
}
}
}
我知道我们可以将Path
提取到SubView中,并使用animatableData
属性来设置动画,但是,我想知道如果不这样做(直接设置Path
的动画)是否可以实现。
- 我的尝试:**我认为使
ContentView
可动画化并在ContentView
本身中使用所需的animatableData
属性会有所帮助。
- 我的尝试:**我认为使
例如:
struct ContentView: View {
@State private var end = 0.0
var animatableData: Double {
get { end }
set { end = newValue }
}
var body: some View {
VStack {
Button("Press me") {
withAnimation {
end += 100
}
}
Path { path in
path.move(to: .zero)
path.addLine(to: CGPoint(x: end, y: end))
}
.stroke()
}
}
}
不幸的是,这并不起作用。我也试着在Path
上添加.animation
修改器,但仍然没有起作用。
是否可以在不将Shape
或不同类型的子视图中 Package 的情况下对此Path
进行动画处理?我不希望能够更改end
并在不将Path
Package 在不同视图中的情况下对更改进行动画处理。
先谢了!
1条答案
按热度按时间zrfyljdw1#
可以将**.trim修改器与.animation**修改器一起使用。
限制:.trim将动画路径从开始到结束一次。
因此,最好使用Shape类来执行此操作。