使用.draggable时如何确定正在拖动哪个元素

问题描述 投票:0回答:1

假设每个字符串数组都很简单,我们可以通过这样的方式实现

.draggable
行为

ForEach(myStrings) { myString in
  Text(myString)
  .draggable(myString){
    Text(myString).foregroundStyle(.red)
  }
}

应用程序的其他地方有一个

.dropDestination
。这个预览位可以很好地改变我们手指跟随的元素的样式,但是有没有办法在拖动时也改变原始
Text(myString)
的样式?

理论上更新后的伪代码看起来像这样

ForEach(myStrings) { myString in
  Text(myString).foregroundStyle(isDragging ? .yellow : .black) // Update
  .draggable(myString){
    Text(myString).foregroundStyle(.red)
  }
}

如何确定

isDragging
部分?据我所知,
.draggable
没有提供有关当前正在拖动的元素的任何信息?我想出的最佳解决方案是将
.onAppear
.onDisappear
添加到可拖动预览元素,但是一旦移动(未释放)就会触发消失

ios swift swiftui drag-and-drop
1个回答
0
投票

如果我误解了,请原谅我,但看来您的实际问题是“有没有办法在拖动原始文本(myString)时更改其样式”。在这种情况下,在 CodeAcademy 找到了以下示例,它修改了 .draggable(_:preview:):

struct ContentView: View {
  @State private var myPayload: String = "I belong in a blue box."
  var body: some View {
    HStack(spacing: 50) {
      Square(text: $myPayload, color: .pink)
        .draggable(myPayload, preview: {
          Text("Dragging... \(myPayload)")
            .padding()
            .background(Color.purple)
            .cornerRadius(25)
        })
    }
  }
}
struct Square: View {
 @Binding var text: String
 var color: Color
 var body: some View {
   ZStack {
     color
     Text(text)
       .padding()
       .bold()
   }
   .frame(width: 150, height: 150)
   .cornerRadius(25)
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.