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
            }
        }
    }
}

Это не работает. Он показывает мне представление как для выбранной ячейки, так и для предыдущей выбранной ячейки, когда я действительно хочу, чтобы представление анимировалось из одной ячейки в другую.

Кто-нибудь знает, что я делаю неправильно ??

0 ответов

Другие вопросы по тегам