Middle
100
questionbank
Что такое matchedGeometryEffect в SwiftUI?
Ответ от нейросети
sobes.tech AI
matchedGeometryEffect в SwiftUI — это модификатор, позволяющий плавно анимировать изменение размера и положения представлений при их перемещении между различными иерархиями или контейнерами.
Основные принципы:
- Сопоставление идентификаторов: Вы указываете один и тот же идентификатор (
id) для представлений, которые хотите анимировать при переходе. - Источник и цель: Указываете пространство имен (
namespace), которое объединяет эти представления. - Автоматическая анимация: SwiftUI автоматически рассчитывает промежуточные состояния и анимирует переход из одного состояния в другое.
Применение:
import SwiftUI
struct ContentView: View {
@Namespace private var namespace
@State private var isExpanded = false
var body: some View {
VStack {
if isExpanded {
RoundedRectangle(cornerRadius: 10)
.fill(Color.blue)
.matchedGeometryEffect(id: "box", in: namespace)
.frame(width: 200, height: 200)
.onTapGesture {
withAnimation {
isExpanded.toggle()
}
}
} else {
RoundedRectangle(cornerRadius: 5)
.fill(Color.red)
.matchedGeometryEffect(id: "box", in: namespace)
.frame(width: 50, height: 50)
.onTapGesture {
withAnimation {
isExpanded.toggle()
}
}
}
}
}
}
В этом примере RoundedRectangle меняет размер и цвет при переключении между состояниями isExpanded, используя matchedGeometryEffect с идентификатором "box" и пространством имен namespace. SwiftUI автоматически анимирует это изменение.