SwiftUI onDrag – нет обратной связи по окончании перетаскиванияIOS

Программируем под IOS
Ответить
Anonymous
 SwiftUI onDrag – нет обратной связи по окончании перетаскивания

Сообщение Anonymous »

Я изучал модификатор onDrag SwiftUI и был немного озадачен тем фактом, что после его завершения, похоже, не было никакой обратной связи. Некоторые люди предлагали подключить и выполнить действия с deinit NSItemProvider, и это решает некоторые случаи, но есть один конкретный случай, когда это не так, поскольку кажется, что SwiftUI пропускает NSItemProvider экземпляр. Вот минимальная настройка для воспроизведения проблемы:

Код: Выделить всё

import SwiftUI

struct DragDropDebugView: View {
@State private var isDragging = false

var body: some View {
VStack {
Text(isDragging ? "Dragging" : "Not dragging")
Color.red
.onDrag(
{
isDragging = true
return DraggableItemProvider {
self.isDragging = false
}
},
preview: {
Color.blue.frame(width: 50, height: 50)
}
)
}
}
}

private final class DraggableItemProvider: NSItemProvider {
private var deinitAction: () -> Void

init(deinitAction: @escaping () -> Void) {
print("DraggableItemProvider init")
self.deinitAction = deinitAction
super.init()
}

deinit {
print("DraggableItemProvider deinit")
deinitAction()
}
}
Если я долго нажимаю, чтобы вызвать действие перетаскивания, перетаскиваю элемент и отпускаю, эта настройка работает правильно, и я вижу, что DraggableItemProvider deinit печатается. Если я просто долго нажимаю и отпускаю, не перетаскивая его по deinit, никогда не печатается, и я вижу просочившийся экземпляр на графике памяти:
Изображение
Кто-нибудь знает способ обойти эту проблему? Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/783 ... -drag-ends
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»