В моем приложении я перетаскиваю View
по горизонтали, чтобы установить положение объекта модели. Я также могу перетащить его вниз и отпустить, чтобы удалить объект модели. Когда он утащен вниз достаточно далеко, я указываю на возможность удаления, изменяя его внешний вид. Проблема в том, что это изменение прерывает DragGesture
. Я не понимаю, почему это происходит.
Пример кода ниже демонстрирует проблему. Вы можете перетащить голубую коробку из стороны в сторону. Если вы потянете вниз, он и превратится в образ системы «Лучи», но перетаскивание умрет.
DragGesture
применяется к ZStack
размером 50x50. ZStack
должно продолжать существовать во всем этом состоянии, не так ли? Почему жест перетаскивания умирает?
struct ContentView: View {
var body: some View {
ZStack {
DraggableThing()
}.frame(width: 300, height: 300)
.border(Color.black, width: 1)
}
}
struct DraggableThing: View {
@State private var willDeleteIfDropped = false
@State private var xPosition: CGFloat = 150
var body: some View {
//Rectangle()
// .fill(willDeleteIfDropped ? Color.red : Color.blue.opacity(0.3))
ZStack {
if willDeleteIfDropped {
Image(systemName: "rays")
} else {
Rectangle().fill(Color.blue.opacity(0.3))
}
}
.frame(width: 50, height: 50)
.position(x: xPosition, y: 150)
.gesture(DragGesture()
.onChanged { val in
print("drag changed \(val.translation)")
self.xPosition = 150 + val.translation.width
self.willDeleteIfDropped = (val.translation.height > 25)
}
.onEnded { val in
print("drag ended")
self.xPosition = 150
}
)
}
}