标签: uicollectionviewdragdelegate

拖动UICollectionViewCell时如何实现透明背景或圆角

我敢肯定,一定是这样做的一个简单的方法,但我花了很长一段时间下来没有成功的各种兔子洞为止。

我有一个支持拖放的集合视图。被拖动的细胞具有UIImageViewcontentView,并且图像视图的衬里层具有施加一个拐角半径。单元格中所有视图的背景颜色都是清晰的。

拖动时,单元格有一个白色背景,显示在图像视图的角落周围:

拖动单元格时的白色背景

有没有办法四舍五入整个可拖动视图;或将其背景设置为清除以便不可见恼人的白色边框?

更新

事实证明,解决方案非常简单(假设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 uicollectionviewdragdelegate

5
推荐指数
1
解决办法
357
查看次数

UICollectionViewDragDelegate 不起作用

我成功地实现了UICollectionView在屏幕上显示一些虚拟文本的功能。一切工作正常,现在我添加了拖动功能实现self.collectionView.dragDelegate = selfUICollectionViewDelegateFlowLayout,但它不起作用。我还缺少什么吗?

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

3
推荐指数
1
解决办法
1205
查看次数