取消UICollectionView中的活动拖动

时间:2017-07-19 01:27:02

标签: ios uicollectionview uigesturerecognizer ios11

我已实施UICollectionViewDragDelegate以允许用户拖放集合视图单元格。我还为每个单元格添加了UILongPressGestureRecognizer。在长按单元格之后,在长按手势状态开始之前识别拖动交互。如果你拖动它取消长按手势。这非常有效。

但为了使这两者更好地一起播放,当识别出长按手势时(state == .began)我想以编程方式取消正在进行的拖动会话 - 取消它就好像用户释放他们的手指导致该单元格不再被拖拽,而是继续识别长按手势。否则,拖动和长按动作都被激活,这在我的情况下不能很好地工作 - 一次需要激活一个或另一个。怎么办?

请注意,如果您继续长按单元格而不拖动,则拖动将在约2秒后取消。我只想在识别出长按手势后立即取消它,这样用户就不必等待。

UICollectionView有一个属性hasActiveDrag来表示该状态,但我没有找到取消它的方法。我确实尝试将dragInteractionEnabled设置为false,然后再次设置true,希望取消它但会保持活动状态。我甚至尝试在被拖动的索引路径上重新加载单元格但是也没有取消它。

我已经整理了一些Sample Project你可以跑来看看这里发生了什么。

1 个答案:

答案 0 :(得分:1)

如果你在集合视图上查看识别器,你会发现_UIDragLiftGestureRecognizer可以通过设置enabled = NO来取消拖放识别。