SwiftUI-如何使用onTapGesture仅初始化ScrollView中的一个SectionView

时间:2020-11-07 15:58:36

标签: swiftui

我的问题是,当用户在ScrollView中按下该项目时,所有SectionView项目都会更改。我只想更改一项。我正在尝试在用户点击项目图像时对其进行更改,然后在用户点击另一个项目以恢复先前的项目图像并更改当前项目图像时进行更改。

看看我的ScrollView:

employeeDepartments

这是我的SectionView:

                ScrollView(.horizontal, showsIndicators: false) {
                HStack(spacing: 15) {
                    ForEach(1..<41) { item in
                        GeometryReader { geometry in
                            SectionView(number: item, pressed: pressed, firstElement: (item == 1) ? true : false)
                                .rotation3DEffect(Angle(degrees:
                                                            Double(geometry.frame(in: .global).minX - 30) / -20
                                ), axis: (x: 0, y: 10, z: 0))
                                
                                .onTapGesture {
                                    self.pressed.toggle()
                                    SectionView(number: item, pressed: self.pressed, firstElement: (item == 1) ? true : false)
                                    print("touched item \(item)")
                                }
                        })
                    }
                }
            }

1 个答案:

答案 0 :(得分:0)

我尝试将您的代码置于某种可构建状态,但是我无法使其进行编译或运行,因此我可能完全误解了您要执行的操作。但是,在我看来,您使用pressed的方式就像是在按下特定SectionView时捕获状态一样。但是,它必须是State var才能进行编译,因此它将更新所有视图,这是我相信您所看到的。我认为您需要做的就是将pressed更改为一个可以跟踪所按下的SectionView的Int,然后将其与允许特定SectionView对其进行跟踪的数字进行比较身份。

此外,我认为您不希望在点击手势中使用SectionView。我认为您只想更改按下的变量的状态,并使其在层次结构中起作用。

最后,显示minimal reproducible code确实很有帮助。我知道这并不总是可能的,但是从您提出问题的方式来看,您实际所从事的工作,而不是您想要的。