Sobes.tech
Назад к вопросам
Middle+
145
questionbank

Что такое matchedGeometryEffect и как он используется в SwiftUI?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

matchedGeometryEffect в SwiftUI используется для создания плавной анимации перехода между двумя представлениями, которые представляют один и тот же визуальный элемент в разных макетах. Он связывает геометрию представления в одном состоянии с геометрией другого представления в другом состоянии, позволяя SwiftUI автоматически анимировать изменения.

Используется путем применения модификатора .matchedGeometryEffect к обоим представлениям, которые должны быть связаны. Модификатор принимает три параметра:

  1. id: Уникальный идентификатор для связи представлений.
  2. in: Пространство имен (Namespace), в котором зарегистрирован идентификатор. Обычно создается с помощью @Namespace.
  3. 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 анимирует переход между двумя состояниями представлений, создавая эффект плавного изменения размера и положения прямоугольника.