我正在尝试在UICollectionView中实现新的拖放方法,但无法弄清楚如何从正在拖动的单元格中删除背景。
以下是问题的屏幕截图:
这是我正在尝试的代码:
func collectionView(_ collectionView: UICollectionView, dragPreviewParametersForItemAt indexPath: IndexPath) -> UIDragPreviewParameters? {
let parameters = UIDragPreviewParameters()
parameters.backgroundColor = .clear
return parameters
}
问题是,它实际上并没有起作用。背景仍然可见。我正在考虑使用visiblePath: UIBezierPath
,但我认为它不会与文本配合使用。
有没有办法完全删除此背景?
答案 0 :(得分:0)
我不确定没有使用UIBezierPath
的方法。
以下是我为类似行为所做的示例:
final class CustomCell: UITableViewCell {
@IBOutlet weak var mySuperLabel: UILabel!
@IBOutlet weak var whiteSubview: UIView! // I have added a cornerRadius of 12.0 in the XIB
}
然后,委托方法:
func tableView(_ tableView: UITableView, dragPreviewParametersForRowAt indexPath: IndexPath) -> UIDragPreviewParameters? {
let cell = tableView.cellForRow(at: indexPath) as! CustomCell
let previewParameters = UIDragPreviewParameters()
let path = UIBezierPath(roundedRect: cell.whiteSubview.frame, cornerRadius: 12.0)
previewParameters.visiblePath = path
previewParameters.backgroundColor = .clear
return previewParameters
}
结果:
答案 1 :(得分:0)
另一种方法是在拖动开始时使用ItemProvider。
func collectionView(_ collectionView: UICollectionView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> [UIDragItem] {
let itemProvider = NSItemProvider()
let dragItem = UIDragItem(itemProvider: itemProvider)
dragItem.previewProvider = { () -> UIDragPreview? in
let cell = collectionView.cellForItem(at: indexPath) // Do cell preview modifications here
cell?.layer.backgroundColor = UIColor.clear.cgColor
cell?.backgroundColor = .clear
return UIDragPreview(view: cell!)
}
return [dragItem]
}