2

我有这样的代码:

            VStack{
                if (DeleteScreen.sharedInstance.postDelete){
                    VStack{
                        GeometryReader{_ in
                            DeletePostAlert()
                                .frame(maxWidth: .infinity, alignment: .center)
                                .frame(maxHeight: .infinity, alignment: .center)
                                .transition(AnyTransition.opacity.animation(.easeInOut(duration: 0.2)))
                            
                        }.background(Color.black.opacity(0.65))
                        
                        .onDisappear{

                        }
                        .onAppear{
                            
                            
                            
                        }
                    }
                }
            }

DeletePost 警报的定义如下:

class DeleteScreen: ObservableObject {
    static let sharedInstance = DeleteScreen()
    @Published var postDelete: Bool = false
}

但是,由于某种原因,过渡动画不起作用。我试图让 DeletePostAlert() 淡入或滑入或其他东西,但到目前为止我尝试过的一切都没有奏效。我也尝试过类似 .animation(.spring()) 的方法,但无济于事。

任何关于我在这里做错的指导将不胜感激。

谢谢

4

1 回答 1

3

我也有完全一样的问题。看起来像一个错误。

一个可能对您有用的解决方案是transitionGeometryReader.

VStack {
    if(DeleteScreen.sharedInstance.postDelete) {
        VStack {
            GeometryReader { _ in
                DeletePostAlert()
                    .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center)
            }
            .transition(AnyTransition.opacity.animation(.easeInOut(duration: 0.2)))
            .background(Color.black.opacity(0.65))
            .onDisappear { ... }
            .onAppear { ... }
        }
    }
}

顺便说一句:我想知道GeometryReader如果你忽略它的geometry价值,你为什么还要使用它。

于 2020-07-18T22:52:49.260 回答