我敢肯定,一定是这样做的一个简单的方法,但我花了很长一段时间下来没有成功的各种兔子洞为止。
我有一个支持拖放的集合视图。被拖动的细胞具有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
}
Run Code Online (Sandbox Code Playgroud)
这是一个简单的实现,它硬编码了CGRect贝塞尔路径的来源 - 这适用于我的场景,因为所有单元格的大小都相同。更复杂的集合视图在这里需要一些自定义计算。
我成功地实现了UICollectionView在屏幕上显示一些虚拟文本的功能。一切工作正常,现在我添加了拖动功能实现self.collectionView.dragDelegate = self和UICollectionViewDelegateFlowLayout,但它不起作用。我还缺少什么吗?
final class XptoComponent: UIView {
private var titles = ["Xpto 1", "Xpto 2", "Xpto 3", "Xpto 4", "Xpto 5", "Xpto 6", "Xpto 7", "Xpto 8", "Xpto 9"]
private var collectionView: UICollectionView = {
let collectionViewLayout = UICollectionViewFlowLayout()
collectionViewLayout.minimumInteritemSpacing = 0
collectionViewLayout.minimumLineSpacing = 0
collectionViewLayout.itemSize = CGSize(width: UIScreen.main.bounds.size.width, height: NumericConstant.ViewCell.height)
collectionViewLayout.sectionInset = .zero
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: collectionViewLayout).usingAutoLayout()
collectionView.registerCell(XptoCollectionViewCell.self)
return collectionView
}()
init() {
super.init(frame: .zero)
self.collectionView.dataSource = self
self.collectionView.delegate …Run Code Online (Sandbox Code Playgroud) drag-and-drop ios uicollectionview swift uicollectionviewdragdelegate