SwiftUI: предотвращение ввода пользователя между анимированными видами - PullRequest
0 голосов
/ 22 апреля 2020

Мне интересно, как обеспечить отсутствие ввода пользователем между анимированными видами.

Насколько я понимаю, анимация может задержать рендеринг, но она не мешает пользователю взаимодействовать с второе представление, прежде чем оно появится.

См. связанный код в качестве доказательства концепции нежелательного поведения. Я бы хотел, чтобы пользователь нажимал на кнопки 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)
      }
     }
   }
}
...