当我在视图的一组实体中显示或隐藏视图时,我试图用SwiftUI找出动画。我有以下代码:
var body: some View {
Group {
if isIntroShown {
EAIntroViewContentView()
.transition(AnyTransition.opacity.animation(.easeInOut(duration: 1.0)))
}
if mainhomeMode == .mylists {
MyLists()
.onReceive(publisher) { (payload) in
self.toggleMainView()
}
} else {
CarsHome()
.onReceive(publisher) { (payload) in
self.toggleMainView()
}
}
}.onReceive(publisherIntro) { (payload) in
self.onShowIntroButton()
}
}
隐藏EAIntroView
时,过渡动画可以正常工作,但是该块会弹出,将mainhomeMode
向上移动到没有动画的窗口顶部。如何隐藏和显示Intro视图,使隐藏/显示事件变得流畅?
答案 0 :(得分:1)
您尝试过这样的事情吗?
withAnimation {
self.toggleMainView()
}
答案 1 :(得分:1)
好吧,经过一些测试和@Boris的回复,我弄清楚了我需要做什么。
代码应如下所示:
func onShowIntroButton() {
withAnimation(.easeInOut(duration: 0.5)) {
isIntroShown.toggle()
}
}
var body: some View {
VStack{
if isIntroShown {
EAIntroViewContentView()
.transition(AnyTransition.opacity.animation(.linear(duration: 0.5)))
}
Spacer()
if mainhomeMode == .mylists {
MyLists()
.onReceive(publisher) { (payload) in
self.toggleMainView()
}
} else {
CarsHome()
.onReceive(publisher) { (payload) in
self.toggleMainView()
}
}
}.onReceive(publisherIntro) { (payload) in
self.onShowIntroButton()
}
}
我正在用通知切换视图。因此,必须从toggle()
函数中调用动画。
在这种情况下,当在功能onShowIntroButton()
中切换了Intro视图时,我必须调用动画。
VStak
和Spacer()
也使动画更加流畅。希望对其他开发人员有所帮助。