当SwiftUI中的@Published值更改时,淡入淡出VStacks [关闭]

bxgwgixi  于 2023-10-15  发布在  Swift
关注(0)|答案(2)|浏览(117)

**已关闭。**此问题需要debugging details。它目前不接受回答。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
8天前关闭
Improve this question
我正试图让我的头周围动画的条件下,一个VStack被删除,一个额外的VStack出现。当NavigationStack推入视图时,subscriptionProduct被加载,这意味着当主体滑入时,视图会发生快速变化,理想情况下,我希望VStack 1淡出,然后VStack 2淡入。
我已经看了一个布尔方法,但不知道如何将动画应用于两者。

@EnvironmentObject var subscriptionManager: SubscriptionManager

var body: some View {
    if(subscriptionManager.subscriptionProduct != nil){
        // VStack 1
        VStack{}
    }else {
        // VStack 2
        VStack{}
    }
    
}
ebdffaop

ebdffaop1#

我想这段代码会对你有所帮助,你可以调整动画的类型和持续时间来满足你的需要。您还可以将其他动画添加到VStack本身,例如淡入淡出动画或缩放动画。

@EnvironmentObject var subscriptionManager: SubscriptionManager

@State private var isVStack1Visible = true

var body: some View {
    VStack {
        if isVStack1Visible {
            // VStack 1
            VStack{}
        } else {
            // VStack 2
            VStack{}
        }
    }
    .onAppear {
        withAnimation(.easeInOut(duration: 0.5)) {
            isVStack1Visible = subscriptionManager.subscriptionProduct != nil
        }
    }
}
xdyibdwo

xdyibdwo2#

我可以通过在ZStack中包围两个VStack,然后将修改器.animation(.easeIn, value: subscriptionManager.productsReady)添加到ZStack来添加动画。
现在,当bool productsReady更新为true时,视图会根据需要进行更改。

@EnvironmentObject var subscriptionManager: SubscriptionManager

var body: some View {
    ZStack {
        if(subscriptionManager.subscriptionProduct != nil){
            // VStack 1
            VStack{}
        }else {
            // VStack 2
            VStack{}
        }
    }.animation(.easeIn, value: subscriptionManager.productsReady)
    
}

相关问题