SwiftUI:防止用户在动画视图之间输入

时间:2020-04-22 13:45:20

标签: animation swiftui user-input

我想知道如何确保动画视图之间没有用户输入。

我的理解是,动画可以延迟渲染,但不会阻止用户在第二个视图出现之前进行交互。

请参阅关联的代码作为有害行为的概念证明。 我希望用户单击按钮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)
      }
     }
   }
}

0 个答案:

没有答案