我创建了一个SampleView
,其中Button
被包装在ZStack
中,整个ZStack
是在Button
的轻击下设置动画的.如下所示:
struct SampleView: View {
@State private var toggle: Bool = false
var body: some View {
ZStack {
Button {
toggle.toggle()
} label: {
Text("Tap here to move!")
.font(.system(size: 20, weight: .black))
.foregroundColor(.black)
}
.padding(10)
.background(.red)
}
.offset(x: 0, y: toggle ? 0 : 200)
.animation(.easeInOut(duration: 1), value: toggle)
}
}
struct SampleView_Previews: PreviewProvider {
static var previews: some View {
// ZStack {
SampleView()
// }
}
}
我还有一堆其他的视图要呈现,所以我简单地将SampleView
包装在VStack
(或ZStack
)中.Now, the animation started to break:
struct SampleView_Previews: PreviewProvider {
static var previews: some View {
ZStack {
SampleView()
}
}
}
我注意到,我可以通过用withAnimation
包装按钮操作来解决这个问题.
withAnimation(.easeInOut(duration: 1)) {
toggle.toggle()
}
不过,我想知道这到底是怎么回事.这是个窃听器吗?