2017-07-19 12 views
2

私はUICollectionViewDragDelegateを実装して、ユーザーがコレクションビューのセルをドラッグアンドドロップできるようにしました。私もUILongPressGestureRecognizerを各セルに追加しました。セルを長押しすると、長押しジェスチャ状態が始まる前にドラッグ操作が認識される。あなたがそれを周りにドラッグすると、長いプレスのジェスチャーがキャンセルされます。これはかなりうまくいく。UICollectionViewのアクティブなドラッグをキャンセルします

しかし、これらの2つを一緒にするのは、長押しのジェスチャーが認識されたとき(state == .began)、進行中のドラッグセッションをプログラムでキャンセルしたいと思います。ユーザーが指を離したようにキャンセルして、周りをドラッグして、長いプレスのジェスチャーを認識し続けます。それ以外の場合は、ドラッグと長押しの両方の動作が有効になり、私の場合はうまく動作しません - 一方または他方を一度にアクティブにする必要があります。それはどうやってできますか?

ドラッグしないでセルを長く押し続けると、約2秒後にドラッグがキャンセルされることに注意してください。私は、長押しのジェスチャーが認識されるとすぐにキャンセルして、ユーザーが待たなくてもいいようにしたいだけです。

UICollectionViewはステータスを示すためにプロパティhasActiveDragを持っていますが、キャンセルする方法はありません。私はdragInteractionEnabledfalseに設定してからもう一度trueに設定しようとしましたが、それも取り消すことができますが、アクティブなままです。私はドラッグされているインデックスパスでセルをリロードしようとしても、それをキャンセルしませんでした。

Sample Projectを少し入れて、ここで何が起こっているのか見ることができます。

答えて

2

コレクションビューのレコグナイザを見ると、enabled = NOを設定してドラッグアンドドロップをキャンセルするために使用できる_UIDragLiftGestureRecognizerがあります。

関連する問題