func paste (itemProviders: [NSItemProvider]) { - PullRequest
0 голосов
/ 22 мая 2019

Я использую функции «перетаскивания» и «вставки» нескольких изображений для нескольких изображений в одном приложении.Поскольку функция «перетаскивание» позволяет узнать источник изображения imageView, функция «перетаскивание» позволяет узнать «цель» imageView в конце «перетаскивания» (координаты? Tag? ...).Спасибо за любые предложения.

// Прямо здесь, itemsForBeginning session (UIDragSession) позволяет получить imageView источника.

func dragInteraction(_ interaction: UIDragInteraction, itemsForBeginning session: UIDragSession) -> [UIDragItem] {

    let touchPoint = session.location(in: self.view)
    print("\(touchPoint.x)")
    print("\(touchPoint.y)")
    //...

    guard let image = viewTaped!.image else { return [] }
    let item = UIDragItem(itemProvider: NSItemProvider(object: image))
    return [item]
}

// Но с функцией «вставить», Swiftзнает цель, но могу ли я и как восстановить информацию imageView_yyy?(координаты? Метка? ...).

override func paste(itemProviders: [NSItemProvider]) {
    _ = itemProviders.first?.loadObject(ofClass: UIImage.self, completionHandler: { (image: NSItemProviderReading?, error: Error?) in
        DispatchQueue.main.async {
            self.imageView_yyy.image = image as? UIImage
        }
    })
}

1 Ответ

0 голосов
/ 23 мая 2019

Вам необходимо сохранить обратный вызов загрузки.Присваивая его _, вы говорите Swift, что это мусор, который можно сразу выбросить

// This retains the progress
var pasteProgress: Progress?

override func paste(itemProviders: [NSItemProvider]) {
    pasteProgress = itemProviders.first?.loadObject(ofClass: UIImage.self, completionHandler: { (image: NSItemProviderReading?, error: Error?) in
        DispatchQueue.main.async {
            self.imageView_yyy.image = image as? UIImage
        }
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...