我想知道如何确保动画视图之间没有用户输入。
我的理解是,动画可以延迟渲染,但不会阻止用户在第二个视图出现之前进行交互。
请参阅关联的代码作为有害行为的概念证明。 我希望用户单击按钮1或2,然后看到一个动画,他无法输入任何内容,然后单击按钮3和4,然后可以单击它们。
问题在于,如果用户双击按钮1的速度过快,实际上会看到他在不知不觉中被单击的按钮3,这是不必要的操作。
我知道我可以通过对单击的按钮上的条件进行编码并使用DispatchQueue.main.asyncAfter(deadline: .now() + self.answerDelay)
来延迟视图的显示来进行管理
但是它违背了SwiftUI处理动画的目的,我想知道是否没有更简单的解决方案。有什么主意吗?
struct ContentView: View {
@State private var newView = false
let answerAnimation = Animation.easeInOut(duration: 2).delay(1)
var body: some View {
return VStack() {
if !newView {
VStack() {
Button("button 1") {
withAnimation(self.answerAnimation) {
self.newView = true
}
}
Button("button 2") {
withAnimation(self.answerAnimation) {
self.newView = true
}
}
}
.frame(width: 100, height: 100)
.background(Color.red)
} else {
VStack() {
Button("button 3") {
withAnimation(self.answerAnimation) {
self.newView = false
}
}
Button("button 4") {
withAnimation(self.answerAnimation) {
self.newView = false
}
}
}
.frame(width: 100, height: 100)
.background(Color.green)
}
}
}
}