Eu tenho uma visualização pai que apresenta algumas visualizações, dependendo do valor de uma variável observada.
No exemplo simples abaixo, RainbowView é apresentado quando a variável @Published "settings.showRainbow" é verdadeira.
O RainbowView define "settings.showRainbow" como falso quando o usuário toca em uma das cores do arco-íris, o que faz com que a visualização pai a remova e exiba outra visualização. A localização do toque também é definida pelo RainbowView.
Quando o RainbowView é removido, sua animação de transição de remoção serve para ampliar o local onde o usuário tocou.
Funciona perfeitamente... exceto, é claro, que o valor da âncora .scale da transição de remoção, a variável "tapLocation", é definido quando a visualização é apresentada, e não quando ela é removida.
O que eu gostaria é que o SwiftUI esperasse para capturar o local da âncora até o momento em que a visualização estiver prestes a ser removida.
Alguém sabe se isso é possível? Eu poderia tornar a visualização filha responsável pela animação quando estiver prestes a ser descartada (o que funciona bem), mas preferiria que a visualização pai fosse responsável pela animação de remoção.
Aqui está um trecho de código:
if settings.showRainbow {
RainbowView()
.transition(AnyTransition
.asymmetric(
insertion: .opacity,
removal: .scale(scale: 24,
anchor: tapLocation)))
} else {
OtherView()