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 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Жест перетаскивания Android: можно ли иметь события в начале перетаскивания во время перетаскивания?
    Anonymous » » в форуме Android
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Как надежно обнаружить, когда Swiftui .Ondrag отменяется / закончится
    Anonymous » » в форуме IOS
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Сообщение об окончании очереди
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Сборка пакета Python 3.13.0pm/deb. По окончании обновления все установленные файлы удаляются.
    Anonymous » » в форуме Python
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous
  • Проблема «запаздывания» onDrag в iOS 18
    Anonymous » » в форуме IOS
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous

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