Swift检测UICollectionViewCell是否被拖动到另一个UICollectionViewCell之上

时间:2017-08-03 20:32:47

标签: swift uicollectionview uicollectionviewcell

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

我希望拖放行为来检测拖动的单元格何时位于另一个单元格的顶部。谷歌搜索没有任何帮助,但Stackoverflow有this solution。虽然我可以尝试通过在<table id="mytable" class="table table-striped table-bordered footable" data-filtering="true"> 类中编写类似内容来检查拖动的单元格的Rect是否与每个其他单元格相交,但我想知道是否有没有更有效的方法来实现这一目标?

1 个答案:

答案 0 :(得分:0)

离开我的头顶,我想你可以抓住拖动视图的最小和最大X或Y坐标(取决于集合视图是水平还是垂直),然后通过视图进行二进制搜索在集合中,直到找到相交的那个。这样,您就不必测试所有视图。

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

0 1 2 3 4 5 6 7 8 9 10

我们首先获取拖动视图的最小和最大X值。我们称之为“minX”和“maxX”。我们首先查看列表中间的视图,查看5.如果maxX&lt;查看5的最小X,然后我们正在寻找的视图必须是0 ... 4之一。如果minX>查看5分钟X,然后我们正在寻找6 ... 10的东西。否则,视图5与水平维度中的拖动视图相交。

在测试视图5之后,我们测试视图2或视图8,具体取决于拖动视图是在视图5的左侧还是右侧。我们继续通过此方法,直到我们发生重叠视图,并且每次我们测试视图我们从考虑中消除了一半的视图,因此它比测试集合中的每个视图都要好。

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