我有一个父视图,它根据观察到的变量的值呈现几个视图之一。
在下面的简单示例中,当 @Published 变量“settings.showRainbow”为 true 时,将显示 RainbowView。
当用户点击彩虹的一种颜色时,RainbowView 将“settings.showRainbow”设置为 false,这会导致父视图将其删除,并显示另一个视图。点击位置也由 RainbowView 设置。
当RainbowView被移除时,它的移除过渡动画是围绕用户点击的位置进行放大。
它工作得很好......当然,除了移除过渡的 .scale 锚点的值(变量“tapLocation”)是在呈现视图时设置的,而不是在移除视图时设置的。
我想要的是 SwiftUI 等待捕获锚点位置,直到视图即将被删除的时间点。
有谁知道这是否可能?我可以让子视图在即将被关闭时负责对自身进行动画处理(效果很好),但我更希望让父视图负责删除动画。
这是一个代码片段:
if settings.showRainbow {
RainbowView()
.transition(AnyTransition
.asymmetric(
insertion: .opacity,
removal: .scale(scale: 24,
anchor: tapLocation)))
} else {
OtherView()