【问题标题】:SwiftUI - Animation when hiding viewSwiftUI - 隐藏视图时的动画
【发布时间】:2019-12-04 20:17:21
【问题描述】:

当在视图中的一组主体中显示或隐藏视图时,我正在尝试使用 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 视图以使隐藏/显示事件顺利进行?

【问题讨论】:

  • 您需要将过渡动画添加到任何其他视图,方法与为 Intro 所做的相同。
  • 它没有按我想要的方式工作。我的身体有两种观点。广告我需要的是,当关闭上部介绍视图时,底部视图将其大小更改为带有动画的全屏。

标签: ios swift swiftui


【解决方案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()函数中调用。

在这种情况下,当 Intro 视图在函数 onShowIntroButton() 中切换时,我必须调用动画。

VStakSpacer() 也使动画更加流畅。希望对其他开发者有所帮助。

【讨论】:

    【解决方案2】:

    你有没有尝试过这样的事情?

    withAnimation {
        self.toggleMainView()
    }
    

    【讨论】:

    • 不...它不工作。我需要添加一个动画,当介绍视图关闭时,它会在屏幕下方向上移动。
    • 但它帮助我找到了解决方案。谢谢!
    • 也许,我没有完全理解你的任务,但我的想法是在切换功能上使用 withAnimation,具体取决于你想要移动的内容。我很高兴我的回答帮助您找到了解决方案。干得好!
    猜你喜欢
    • 2021-03-03
    • 2023-03-21
    • 2018-03-01
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    相关资源
    最近更新 更多