Sobes.tech
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 автоматически анимирует это изменение.