SwiftUI передает представление между ячейками списка с помощью MatchedGeometryEffect
Я пытаюсь передать представление между ячейками одного и того же представления списка. Я видел 0 примеров для этого онлайн. Каждый пример предназначен для наличия ForEach, который показывает представления.
Я знаю, что могу использовать ScrollView, но мне особенно интересно научиться делать это с помощью списка.
Это код моей ячейки:
struct SelectableRow: View {
@Binding var selectedCategoryID: Int
@Binding var previousSelectedCategoryID: Int
var category: Category
@Namespace private var namespace
var body: some View {
HStack {
Text(self.category.name.capitalizingFirstLetter())
.font(.body)
.fontWeight(.light)
Spacer()
.background(Color.red)
if category.id == selectedCategoryID {
Circle()
.foregroundColor(.pink)
.aspectRatio(contentMode: .fit)
.frame(height: 30)
.matchedGeometryEffect(id: "Cell\(selectedCategoryID)", in: namespace, properties: .frame, anchor: .center, isSource: false)
}
else if category.id == previousSelectedCategoryID {
Circle()
.foregroundColor(.pink)
.aspectRatio(contentMode: .fit)
.frame(height: 30)
.matchedGeometryEffect(id: "Cell\(selectedCategoryID)", in: namespace, properties: .frame, anchor: .center, isSource: true)
}
}
.contentShape(Rectangle())
.onTapGesture {
previousSelectedCategoryID = selectedCategoryID
withAnimation {
selectedCategoryID = category.id
}
}
}
}
Это не работает. Он показывает мне представление как для выбранной ячейки, так и для предыдущей выбранной ячейки, когда я действительно хочу, чтобы представление анимировалось из одной ячейки в другую.
Кто-нибудь знает, что я делаю неправильно ??