假设每个字符串数组都很简单,我们可以通过这样的方式实现
.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
添加到可拖动预览元素,但是一旦移动(未释放)就会触发消失
如果我误解了,请原谅我,但看来您的实际问题是“有没有办法在拖动原始文本(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)
}
}