我确信一定有一种简单的方法可以做到这一点,但是到目前为止,我已经花了很长时间在各种兔子洞中没有成功。
我有一个支持拖放的集合视图。被拖动的单元格UIImageView
在 中contentView
,并且图像视图的支持层应用了圆角半径。单元格中所有视图的背景颜色清晰。
拖动时,单元格具有白色背景,显示在图像视图的角落周围:
有没有办法将整个可拖动视图四舍五入?或将其背景设置为清除以使烦人的白色边框不可见?
更新
事实证明,解决方案非常简单(假设UIBezierPaths
符合您对简单的定义):
您需要覆盖协议的collectionView(_ collectionView: UICollectionView, dragPreviewParametersForItemAt indexPath: IndexPath)
方法UICollectionViewDragDelegate
,并返回 UIDragPreviewParameters
相应的 UIBezierPath 集:
func collectionView(_ collectionView: UICollectionView, dragPreviewParametersForItemAt indexPath: IndexPath) -> UIDragPreviewParameters? {
let previewParams = UIDragPreviewParameters()
let path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: 140, height: 140), cornerRadius: 20)
previewParams.visiblePath = path
return previewParams
}
这是一个幼稚的实现,CGRect
它对派生贝塞尔路径的硬编码 - 这适用于我的场景,因为所有单元格的大小都相同。更复杂的集合视图需要在这里进行一些自定义计算。