如何使用SwiftUI为可隐藏视图设置动画?

时间:2020-01-13 01:28:32

标签: swift swiftui swiftui-animation

我正在尝试SwiftUI,尽管我发现它的许多功能都非常优雅,但是在动画和过渡方面却遇到了麻烦。目前,我有类似

if shouldShowText { Text(str).animation(.default).transition(AnyTransition.opacity.animation(.easeInOut)) }

此标签确实可以正确过渡,但是当它应该移动时(例如,隐藏了上面的另一个视图时),它没有像我期望的那样动画,而是跳到了适当位置。我注意到将所有内容都包装在HStack中是可行的,但是我不知道为什么这样做是必要的,我希望那里有更好的解决方案。

谢谢

1 个答案:

答案 0 :(得分:1)

如果我正确理解并重构了您的情况,则需要使用显式withAnimation(取决于“上方视图”或两者的需求),如下所示

struct SimpleTest: View {

    @State var shouldShowText = false
    @State var shouldShowAbove = true
    var body: some View {
        VStack {
            HStack
            {
                Button("ShowTested") { withAnimation { self.shouldShowText.toggle() } }
                Button("HideAbove") { withAnimation { self.shouldShowAbove.toggle() } }
            }
            Divider()
            if shouldShowAbove {
                Text("Just some above text").padding()
            }
            if shouldShowText {
                Text("Tested Text").animation(.default).transition(AnyTransition.opacity.animation(.easeInOut))
            }
        }
    }
}