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