Middle
O que é matchedGeometryEffect e como usá-lo no SwiftUI?
sobes.tech IA
Resposta da IA
O matchedGeometryEffect é um modificador no SwiftUI que permite animar suavemente a mudança de tamanho e posição de uma vista ao transitar entre diferentes estados ou hierarquias de vistas. Sincroniza a geometria (tamanho e posição) das vistas em diferentes partes da hierarquia, criando um efeito de "correspondência".
Utilização:
-
Definir
ide espaço de animação:- Atribuir um
idúnico a todas as vistas que devem ser sincronizadas, usando o modificadormatchedGeometryEffect. - Especificar um
namespace(espaço de nomes da animação). Onamespaceconecta as vistas que devem ser animadas juntas. Normalmente, usa-se a anotação@Namespace private var namespace.
- Atribuir um
-
Aplicar às vistas:
- Aplicar
matchedGeometryEffecta cada vista que participa na animação, indicando o mesmoidenamespace. - Alterar a visibilidade ou posição das vistas, por exemplo, usando condições
if/elseou modificando o estado que afeta a disposição. O SwiftUI anima automaticamente a transição.
- Aplicar
struct ContentView: View {
@Namespace private var animationNamespace // Declaração do espaço de nomes
@State private var isExpanded = false
var body: some View {
VStack {
if isExpanded {
RoundedRectangle(cornerRadius: 10)
.fill(Color.blue)
.matchedGeometryEffect(id: "myShape", in: animationNamespace) // Aplicação com id e namespace
.frame(width: 300, height: 200)
} else {
RoundedRectangle(cornerRadius: 10)
.fill(Color.red)
.matchedGeometryEffect(id: "myShape", in: animationNamespace) // Aplicação com o mesmo id e namespace
.frame(width: 50, height: 50)
}
Button("Toggle Size") {
withAnimation { // Uso de withAnimation para transição suave
isExpanded.toggle()
}
}
}
}
}
Pontos-chave:
- Mesmo
idenamespacepara vistas relacionadas. - As mudanças devem ocorrer dentro do bloco de animação (por exemplo, com
withAnimation). - Permite criar transições complexas entre diferentes estados de disposição.
- Pode ser usado com diversos modificadores que afetam tamanho e posição (
frame,padding,offset, etc.).
matchedGeometryEffect simplifica bastante a criação de animações complexas de transformação de vistas em comparação com calcular e animar manualmente os parâmetros do quadro.