SwiftUI - 过渡动画在 GeoReader 中不起作用?
SwiftUI - Transition Animations not working in GeoReader?
我有这样的代码:
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()) 的方法,但无济于事。
任何关于我在这里做错了什么的指导将不胜感激。
谢谢
我也有同样的问题。看起来像一个错误。
一个可能对您有用的解决方案是在 GeometryReader
之上设置 transition
修饰符。
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 { ... }
}
}
}
顺便说一句:我想知道如果您忽略它的 geometry
值,您为什么还要使用 GeometryReader
。
我有这样的代码:
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()) 的方法,但无济于事。
任何关于我在这里做错了什么的指导将不胜感激。
谢谢
我也有同样的问题。看起来像一个错误。
一个可能对您有用的解决方案是在 GeometryReader
之上设置 transition
修饰符。
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 { ... }
}
}
}
顺便说一句:我想知道如果您忽略它的 geometry
值,您为什么还要使用 GeometryReader
。