比方说,我有一个Component()列表,我希望能够分别拖动它们。所以我宣布了一个
@State var cardPosition = CGSize.zero
并作为我的Component()的修饰符:
.offset(x: self.cardPosition.width, y: self.cardPosition.height) .gesture(DragGesture().onChanged {
value in self.cardPosition = value.translation }
我遇到的问题是,如果我在所有Component()上复制此修饰符,则如果拖动其中之一,则将它们全部拖动... 如何更改我拖动的唯一卡片的位置,而不必为每个卡片创建单个@State?
谢谢!
答案 0 :(得分:0)
我最近使用字典管理多个视图的状态,但我不知道实现这一目标的“最佳实践”方法。不过,它可能会涉及使用某种集合,所以这应该是一个好的开始。
let cur = jQuery(this).closest('.step');
let next = cur.next();
next.find(".header").show();
然后在我的 init 中,我从与视图相关的日期创建字典,并使用它来为 State 集合提供其初始值
@State var showDetails: [Date: Bool] = [:]
然后我使用集合在适当的视图上切换状态
let detailDays = Dictionary(uniqueKeysWithValues:
days.map { ($0, false) })
self._showDetails = State<[Date: Bool]>(initialValue: detailDays)
MyView()
.simultaneousGesture(TapGesture().onEnded {
showDetails[date]!.toggle()
})