Что такое matchedGeometryEffect и как он используется в SwiftUI?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
matchedGeometryEffect в SwiftUI используется для создания плавной анимации перехода между двумя представлениями, которые представляют один и тот же визуальный элемент в разных макетах. Он связывает геометрию представления в одном состоянии с геометрией другого представления в другом состоянии, позволяя SwiftUI автоматически анимировать изменения.
Используется путем применения модификатора .matchedGeometryEffect к обоим представлениям, которые должны быть связаны. Модификатор принимает три параметра:
id: Уникальный идентификатор для связи представлений.in: Пространство имен (Namespace), в котором зарегистрирован идентификатор. Обычно создается с помощью@Namespace.properties: Набор свойств геометрии, которые должны быть анимированы (например,.position,.size,.frame).
Пример использования:
struct ContentView: View {
@Namespace private var animation
@State private var isExpanded = false
var body: some View {
VStack {
if isExpanded {
Rectangle()
.fill(Color.blue)
.matchedGeometryEffect(id: "myShape", in: animation)
.frame(width: 200, height: 200)
.onTapGesture {
withAnimation {
isExpanded.toggle()
}
}
} else {
Rectangle()
.fill(Color.red)
.matchedGeometryEffect(id: "myShape", in: animation)
.frame(width: 50, height: 50)
.onTapGesture {
withAnimation {
isExpanded.toggle()
}
}
}
}
}
}
В этом примере .matchedGeometryEffect связывает два Rectangle с одним и тем же id ("myShape") и в одном и том же пространстве имен (animation). Когда isExpanded переключается, SwiftUI анимирует переход между двумя состояниями представлений, создавая эффект плавного изменения размера и положения прямоугольника.