Middle
Какво е matchedGeometryEffect в SwiftUI?
sobes.tech AI
Отговор от 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 автоматично анимира тази промяна.