MatchedGeometryEffect


ULASHISH

SwiftUI animatsiyalar: MatchedGeometryEffect

.matchedGeometryEffect yordamida maketlar bo‘ylab view identifikatsiyasi o‘zgarishlarini animatsiya qiling.


Sintaksis

Mos ID’lar: .matchedGeometryEffect(id: "id", in: namespace) ni ikkita view’ga qo‘llang; SwiftUI ular orasidagi maket/o‘lcham/joylashuvni animatsiya qiladi.


Nuqta katta doiraga aylanadi

Ikki doira bir xil matched geometry ID’ga ega.

State’ni almashtirish kichik va katta variantlar o‘rtasida o‘lcham va joylashuvni animatsiya qiladi.

Misol

import SwiftUI

struct MatchedDemo: View {
  @Namespace private var ns
  @State private var showDetail = false
  var body: some View {
    VStack(spacing: 16) {
      if showDetail {
        Circle().matchedGeometryEffect(id: "dot", in: ns).frame(width: 120, height: 120)
      } else {
        Circle().matchedGeometryEffect(id: "dot", in: ns).frame(width: 40, height: 40)
      }
      Button("Toggle") { withAnimation(.spring()) { showDetail.toggle() } }
    }
    .padding()
  }
}
import SwiftUI

struct ContentView: View {
  var body: some View { MatchedDemo() }
}
import SwiftUI

@main
struct MyApp: App {
  var body: some Scene {
    WindowGroup { ContentView() }
  }
}

Misolni ishga tushirish »

Yuqoridagi misolda ikki doira bir xil matched geometry ID’ga ega.

State’ni almashtirish kichik va katta variantlar o‘rtasida o‘lcham va joylashuvni animatsiya qiladi.



Kartochka batafsil ko‘rinishga kengayadi (umumiy ID)

Kichik kartochka xuddi shu matched geometry ID yordamida kattaroq batafsil view’ga animatsiya bilan aylanadi.

O‘tish vizual uzluksizlikni saqlaydi.

Misol

import SwiftUI

struct CardsMatchedDemo: View {
  @Namespace private var ns
  @State private var expanded = false
  var body: some View {
    VStack(spacing: 16) {
      if expanded {
        RoundedRectangle(cornerRadius: 16)
          .fill(.blue.opacity(0.2))
          .matchedGeometryEffect(id: "card", in: ns)
          .frame(height: 160)
          .overlay(Text("Detail").font(.headline))
      } else {
        RoundedRectangle(cornerRadius: 12)
          .fill(.blue.opacity(0.2))
          .matchedGeometryEffect(id: "card", in: ns)
          .frame(height: 60)
          .overlay(Text("Card").font(.subheadline))
      }
      Button(expanded ? "Close" : "Open") {
        withAnimation(.spring()) { expanded.toggle() }
      }
    }
    .padding()
  }
}
import SwiftUI

struct ContentView: View {
  var body: some View { CardsMatchedDemo() }
}
import SwiftUI

@main
struct MyApp: App {
  var body: some Scene {
    WindowGroup { ContentView() }
  }
}

Misolni ishga tushirish »

Yuqoridagi misolda kichik kartochka xuddi shu matched geometry ID yordamida kattaroq batafsil view’ga animatsiya bilan aylanadi.

O‘tish vizual uzluksizlikni saqlaydi.



W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!