Изменить вид внутри ForEach в SwiftUI
Я попытался обновить позицию одного элемента в ForEach. Я хочу вытащить только один элемент из массива в ForEach. Остальное должно остаться прежним. Я пробовал несколько разных способов и всегда получал, что все элементы перетаскивались или вообще не было элементов.
Я очень расстроен на этом этапе, поэтому был бы более чем счастлив, если бы вы мне помогли! Если вам нужна дополнительная информация, не стесняйтесь спрашивать, я новичок в stackOverflow.
struct ContentView: View {
var texts: [String] = ["Test1", "Test2"]
@State var positon: CGSize = .zero
var body: some View {
HStack {
ForEach(texts, id: \.self) { text in
Text(text)
.offset(y: positon.height)
.gesture(
DragGesture()
.onChanged { value in
positon = value.translation
}
.onEnded { value in
positon = .zero
}
)
}
}
}
}
2 ответа
Вы меняете значение
position
Вам понадобится отдельная переменная @State для каждого представления, если вы хотите, чтобы они двигались независимо, или какой-либо другой способ отслеживать их положение отдельно.
Оба представления перетаскиваются одновременно, потому что оба
Text
взгляды
offset(y: ...)
зависеть от того же
position
Переменная.
Примерно так должно работать:
struct ContentView: View {
var texts: [String] = ["Test1", "Test2"]
var body: some View {
HStack {
ForEach(texts, id: \.self) { text in
DraggableText(text: text)
}
}
}
}
struct DraggableText: View {
var text: String
@State var position: CGSize = .zero
var body: some View {
Text(text)
.offset(y: position.height)
.gesture(
DragGesture()
.onChanged { value in
position = value.translation
}
.onEnded { value in
position = .zero
}
)
}
}
Каждый
DraggableText
имеет собственное свойство позиции.