Sobes.tech
Middle+

matchedGeometryEffect эмне жана ал SwiftUIде кантип колдонулат?

sobes.tech AI

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 өтүүнү автоматтык түрдө анимациялап, көрүнүштөрдүн өлчөмү жана жайгашуусу өзгөрөт, жогорку эффект түзүлөт.