【发布时间】:2017-07-19 01:27:01
【问题描述】:
我实现了UICollectionViewDragDelegate 以允许用户拖放集合视图单元格。我还在每个单元格中添加了UILongPressGestureRecognizer。长按单元格时,在长按手势状态开始之前识别拖动交互。如果您拖动它,它会取消长按手势。这工作得很好。
但是为了让这两者一起玩得更好,当长按手势被识别时 (state == .began) 我想以编程方式取消正在进行的拖动会话 - 取消它就像用户松开手指导致单元格不再被拖动,但继续识别长按手势。否则,拖动和长按动作都会被激活,这在我的情况下效果不佳 - 需要一次激活一个或另一个。怎么可能?
请注意,如果您继续长按单元格而不拖动,拖动将在大约 2 秒后取消。我只是想在识别出长按手势后立即取消它,这样用户就不必等待了。
UICollectionView 有一个属性 hasActiveDrag 来指示该状态,但我没有看到取消它的方法。我确实尝试将dragInteractionEnabled 设置为false 然后true 再次希望可以取消它,但它仍然处于活动状态。我什至尝试在被拖动的索引路径处重新加载单元格,但也没有取消它。
我整理了一点Sample Project,你可以跑去看看这里发生了什么。
【问题讨论】:
标签: ios uicollectionview uigesturerecognizer ios11