title: How to remove 'ghost' cell during UICollectionView drag/drop, and make moving cell opaque?
body: <p>I'm trying to implement drag/drop mechanics in my UICollectionView, very similar to reordering components of a shortcut in the Shortcuts app.</p>
  
  <p>As of now, the behavior is that when you begin a drag, there's a transparent view of the cell left behind while another transparent view of the cell moves with the finger.</p>
  
  <p>I want to get rid of the 'ghost' cell, and make the moving cell completely opaque.</p>
  
  <p>Here's my drag/drop behavior (largely taken from <a href="https://itnext.io/how-to-drag-drop-uicollectionview-cells-by-utilizing-dropdelegate-and-dragdelegate-6e3512327202" rel="noreferrer">this post</a>)</p>
  
  <pre><code>func collectionView(_ collectionView: UICollectionView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -&gt; [UIDragItem] {
      let item = itemData[indexPath.item]
      let itemProvider = NSItemProvider(object: item.title as NSString)
      let dragItem = UIDragItem(itemProvider: itemProvider)
      dragItem.localObject = item
  
  
      return [dragItem]
  }
  
  func collectionView(_ collectionView: UICollectionView, dropSessionDidUpdate session: UIDropSession, withDestinationIndexPath destinationIndexPath: IndexPath?) -&gt; UICollectionViewDropProposal {
  
      if collectionView.hasActiveDrag {
          return UICollectionViewDropProposal(operation: .move, intent: .insertAtDestinationIndexPath)
      }
  
      return UICollectionViewDropProposal(operation: .forbidden)
  }
  
  func collectionView(_ collectionView: UICollectionView, performDropWith coordinator: UICollectionViewDropCoordinator) {
  
      var destinationIndexPath: IndexPath
      if let indexPath = coordinator.destinationIndexPath {
          destinationIndexPath = indexPath
      }
      else {
          let row = collectionView.numberOfItems(inSection: 0)
          destinationIndexPath = IndexPath(row: row - 1, section: 0)
      }
  
      reorderItems(coordinator: coordinator, destinationIndexPath: destinationIndexPath, collectionView: collectionView)
  
  }
  
  fileprivate func reorderItems(coordinator: UICollectionViewDropCoordinator,
                                destinationIndexPath: IndexPath,
                                collectionView: UICollectionView) {
  
      if let item = coordinator.items.first,
          let sourceIndexPath = item.sourceIndexPath {
  
          collectionView.performBatchUpdates({
              self.itemData.remove(at: sourceIndexPath.item)
              self.itemData.insert(item.dragItem.localObject as! PlanItem, at: destinationIndexPath.item)
  
              collectionView.deleteItems(at: [sourceIndexPath])
              collectionView.insertItems(at: [destinationIndexPath])
          }, completion: nil)
  
          coordinator.drop(item.dragItem, toItemAt: destinationIndexPath)
      }
  }
  </code></pre>
  
  <p><img src="https://i.imgur.com/0uaOS4p.png" alt="Here&#39;s an image describing what I want"></p>