【问题标题】:Swift detect if UICollectionViewCell is dragged on top of another UICollectionViewCellSwift 检测 UICollectionViewCell 是否被拖到另一个 UICollectionViewCell 之上
【发布时间】:2017-08-03 20:32:47
【问题描述】:

我有一个 UICollectionView,只有 1 个部分,该部分中有许多单元格。我已启用拖放行为(使用长按手势识别器,因为 UICollectionView 位于通用 UIViewController 中)。

我希望拖放行为来检测拖动的单元格何时超过另一个单元格的顶部。谷歌搜索没有任何帮助,但 Stackoverflow 有 this solution。虽然我可以尝试通过在 UIViewController 类中编写类似的内容来检查拖动的单元格的 Rect 是否与 每个其他单元格 相交,但我想知道是否有更有效的方法来实现这一点目标?

【问题讨论】:

    标签: swift uicollectionview uicollectionviewcell


    【解决方案1】:

    在我的脑海中,我认为您可以抓住拖动视图的最小和最大 X 或 Y 坐标(取决于集合视图是水平还是垂直),然后对视图进行二分搜索在集合中,直到找到相交的一个。这样,您就不必测试所有视图。

    编辑:添加一个示例来阐明我的意思。假设我们有一组从左到右排列的视图:

    0 1 2 3 4 5 6 7 8 9 10

    我们首先获取拖动视图的最小和最大 X 值。我们称它们为“minX”和“maxX”。我们首先查看列表中间的视图,视图 5。如果 maxX 查看 5 的 min X,那么我们正在寻找 6...10 中的东西。否则视图 5 在水平维度上与拖动的视图相交。

    测试视图 5 后,我们测试视图 2 或视图 8,这取决于拖动的视图是在视图 5 的左侧还是右侧。我们继续使用此方法,直到遇到重叠的视图,并且每次我们测试一个视图,我们排除了一半的视图,因此它的性能比必须测试集合中的每个视图更好。

    一旦您找到一个与拖动的视图重叠的视图,您需要检查相邻的视图以查看它们是否也重叠。如果拖动的视图与其他几个视图重叠,则必须选择与最大区域重叠的视图。

    【讨论】:

    • 谢谢,这很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    相关资源
    最近更新 更多