首页 > 解决方案 > 如何从 UIDragItem 中检索 UIImage?

问题描述

我有一个包含两个 UICollectionViews 的 UIViewController。我正在将图像从第一个 UIcollectionView 拖放到第二个。到目前为止,我的拖动实现有效,但我无法检索正在拖动的基础数据,在本例中为图像。下面是我的代码。

extension StartGameViewController: UICollectionViewDragDelegate{
func collectionView(_ collectionView: UICollectionView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> [UIDragItem] {

    print("ITEM DRAGGED INDEX: \(indexPath)")
    // objects for drag and drop must support the NSItemProviderWriting protocol
    // Conforming type : https://developer.apple.com/documentation/foundation/nsitemproviderwriting
    var arrayDragitem = [UIDragItem]()
    guard let arrayData = self.puzzlePieces else{ return []}
    let puzzlePiece = arrayData[indexPath.row]
    let image = puzzlePiece.image
    let itemProvider = NSItemProvider.init(object: image) // UIImage conforms to NSItemProviderWriting
    let dragItem = UIDragItem.init(itemProvider: itemProvider)
    arrayDragitem.append(dragItem)
    return arrayDragitem
}
}

extension StartGameViewController: UICollectionViewDropDelegate{

// Required - Tells your delegate to incorporate the drop data into the collection view.
func collectionView(_ collectionView: UICollectionView, performDropWith coordinator: UICollectionViewDropCoordinator) {

    let destinationIndex = coordinator.destinationIndexPath
    let dropItems = coordinator.items
    let dragItem = dropItems[0].dragItem

    guard let image = dragItem.localObject as? UIImage else{
            print("data retrieval error")
            return
    }
    print("image.size: \(image.size)")
}

标签: swiftuicollectionview

解决方案


推荐阅读