Stack Overflow Asked by user1354934 on January 3, 2022
I have a parent view that can show one of two views:
struct LoginSubView: View {
@State private var loginSubView: LoginSubViews = .login
func setLoginSubView(_ view: LoginSubViews) {
withAnimation {
self.loginSubView = view
}
}
var body: some View {
VStack {
if self.loginSubView == .signup {
SignupView(setLoginSubView: self.setLoginSubView)
.transition(AnyTransition.asymmetric(insertion: .move(edge: .trailing), removal: .move(edge: .leading)).animation(.default))
} else {
LoginView(setLoginSubView: self.setLoginSubView)
.transition(AnyTransition.asymmetric(insertion: .move(edge: .leading), removal: .move(edge: .trailing)).animation(.default))
}
}
.padding(.horizontal, 16)
.keyboardObserving()
}
}
The setLoginSubView()
is called by those child views to switch views.
Unfortunately, it no longer animates when I pass the function and call it from the child. It switches instantly. However, it does work if I do this:
struct LoginSubView: View {
@State private var loginSubView: LoginSubViews = .login
// removed setLoginSubview()
var body: some View {
VStack {
if self.loginSubView == .signup {
SignupView(setLoginSubView: self.setLoginSubView)
.transition(AnyTransition.asymmetric(insertion: .move(edge: .trailing), removal: .move(edge: .leading)).animation(.default))
// Added it here
Button(action: {
withAnimation {
self.loginSubView = .login
}
}) {
Text("Already have an account? Sign in").animation(nil)
}
} else {
LoginView(setLoginSubView: self.setLoginSubView)
.transition(AnyTransition.asymmetric(insertion: .move(edge: .leading), removal: .move(edge: .trailing)).animation(.default))
// And added this here
Button(action: {
withAnimation {
self.loginSubView = .signup
}
}) {
Text("Don't have an account? Sign up").animation(nil)
}
}
}
.padding(.horizontal, 16)
.keyboardObserving()
}
}
How can I have the animation work when passing this function to the child?
Move animation to container (tested with Xcode 12 / iOS 14)
var body: some View {
VStack {
if self.loginSubView == .signup {
SignupView(setLoginSubView: self.setLoginSubView)
.transition(AnyTransition.asymmetric(insertion: .move(edge: .trailing), removal: .move(edge: .leading)))
} else {
LoginView(setLoginSubView: self.setLoginSubView)
.transition(AnyTransition.asymmetric(insertion: .move(edge: .leading), removal: .move(edge: .trailing)))
}
}
.animation(.default) // << here !!
.padding(.horizontal, 16)
.keyboardObserving()
}
Answered by Asperi on January 3, 2022
3 Asked on November 4, 2021 by suryan
1 Asked on November 4, 2021 by liya-thomas
2 Asked on November 4, 2021 by crimsonpython24
1 Asked on November 4, 2021
1 Asked on November 4, 2021
hibernate illegalargumentexception java spring spring data jpa
1 Asked on November 4, 2021 by amy-sdj
2 Asked on November 4, 2021 by rodney-wormsbecher
1 Asked on November 4, 2021 by ru44be4n7
4 Asked on November 4, 2021 by roxypro
3 Asked on November 4, 2021 by mr-code
3 Asked on November 4, 2021 by shartshooter
amazon ec2 amazon elastic beanstalk amazon web services postgresql python
1 Asked on November 4, 2021 by tizio-fittizio
3 Asked on November 4, 2021 by dixcipuli
0 Asked on November 4, 2021 by birgersp
2 Asked on November 4, 2021 by velojet
4 Asked on November 4, 2021 by mauek-unak
1 Asked on November 4, 2021 by dani-herrera
Get help from others!
Recent Questions
Recent Answers
© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP, SolveDir