Swift 检测 UICollectionViewCell 是不是被拖到另一个 UICollectionViewCell 之上
Posted
技术标签:
【中文标题】Swift 检测 UICollectionViewCell 是不是被拖到另一个 UICollectionViewCell 之上【英文标题】:Swift detect if UICollectionViewCell is dragged on top of another UICollectionViewCellSwift 检测 UICollectionViewCell 是否被拖到另一个 UICollectionViewCell 之上 【发布时间】:2017-08-03 20:32:47 【问题描述】:我有一个 UICollectionView
,只有 1 个部分,该部分中有许多单元格。我已启用拖放行为(使用长按手势识别器,因为 UICollectionView
位于通用 UIViewController
中)。
我希望拖放行为来检测拖动的单元格何时超过另一个单元格的顶部。谷歌搜索没有任何帮助,但 *** 有 this solution。虽然我可以尝试通过在 UIViewController
类中编写类似的内容来检查拖动的单元格的 Rect 是否与 每个其他单元格 相交,但我想知道是否有更有效的方法来实现这一点目标?
【问题讨论】:
【参考方案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 的左侧还是右侧。我们继续使用此方法,直到遇到重叠的视图,并且每次我们测试一个视图,我们排除了一半的视图,因此它的性能比必须测试集合中的每个视图更好。
一旦您找到一个与拖动的视图重叠的视图,您需要检查相邻的视图以查看它们是否也重叠。如果拖动的视图与其他几个视图重叠,则必须选择与最大区域重叠的视图。
【讨论】:
谢谢,这很有帮助。以上是关于Swift 检测 UICollectionViewCell 是不是被拖到另一个 UICollectionViewCell 之上的主要内容,如果未能解决你的问题,请参考以下文章
使用 Swift 的 UICollectionView 错误
Swift 3 中的 UICollectionView + NSFetchedResultsController
Swift:滚动时 UICollectionView 标题消失
swift UICollectionView + RxReachedBottom.swift