【问题标题】:Cancel active drag in UICollectionView取消 UICollectionView 中的主动拖动
【发布时间】:2017-07-19 01:27:01
【问题描述】:

我实现了UICollectionViewDragDelegate 以允许用户拖放集合视图单元格。我还在每个单元格中添加了UILongPressGestureRecognizer。长按单元格时,在长按手势状态开始之前识别拖动交互。如果您拖动它,它会取消长按手势。这工作得很好。

但是为了让这两者一起玩得更好,当长按手势被识别时 (state == .began) 我想以编程方式取消正在进行的拖动会话 - 取消它就像用户松开手指导致单元格不再被拖动,但继续识别长按手势。否则,拖动和长按动作都会被激活,这在我的情况下效果不佳 - 需要一次激活一个或另一个。怎么可能?

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

UICollectionView 有一个属性 hasActiveDrag 来指示该状态,但我没有看到取消它的方法。我确实尝试将dragInteractionEnabled 设置为false 然后true 再次希望可以取消它,但它仍然处于活动状态。我什至尝试在被拖动的索引路径处重新加载单元格,但也没有取消它。

我整理了一点Sample Project,你可以跑去看看这里发生了什么。

【问题讨论】:

    标签: ios uicollectionview uigesturerecognizer ios11


    【解决方案1】:

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

    【讨论】:

    • 不过,你是如何寻找它的呢?
    • 我为 collectionView 中的所有手势设置了 enabled = false 并且 drop 仍然处于活动状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 2013-10-04
    • 2019-05-05
    • 2011-07-06
    相关资源
    最近更新 更多