func paste(itemProviders:[NSItemProvider]){

时间:2019-05-22 20:37:54

标签: swift

我在同一应用程序中将多个imagesView的“拖动”和“粘贴”功能用于多个imageView。由于功能“拖动”允许知道原始的imageView,因此功能“放置”是否可以使“拖动”结束时知道imageView“目标”(坐标?标记?...)。谢谢您的任何建议。

//在这里,itemsForBeginning会话: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 :(得分:0)

您需要保留加载回调。通过将其分配给_,您就告诉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
        }
    })
}