私はUICollectionViewDragDelegate
を実装して、ユーザーがコレクションビューのセルをドラッグアンドドロップできるようにしました。私もUILongPressGestureRecognizer
を各セルに追加しました。セルを長押しすると、長押しジェスチャ状態が始まる前にドラッグ操作が認識される。あなたがそれを周りにドラッグすると、長いプレスのジェスチャーがキャンセルされます。これはかなりうまくいく。UICollectionViewのアクティブなドラッグをキャンセルします
しかし、これらの2つを一緒にするのは、長押しのジェスチャーが認識されたとき(state == .began
)、進行中のドラッグセッションをプログラムでキャンセルしたいと思います。ユーザーが指を離したようにキャンセルして、周りをドラッグして、長いプレスのジェスチャーを認識し続けます。それ以外の場合は、ドラッグと長押しの両方の動作が有効になり、私の場合はうまく動作しません - 一方または他方を一度にアクティブにする必要があります。それはどうやってできますか?
ドラッグしないでセルを長く押し続けると、約2秒後にドラッグがキャンセルされることに注意してください。私は、長押しのジェスチャーが認識されるとすぐにキャンセルして、ユーザーが待たなくてもいいようにしたいだけです。
UICollectionView
はステータスを示すためにプロパティhasActiveDrag
を持っていますが、キャンセルする方法はありません。私はdragInteractionEnabled
をfalse
に設定してからもう一度true
に設定しようとしましたが、それも取り消すことができますが、アクティブなままです。私はドラッグされているインデックスパスでセルをリロードしようとしても、それをキャンセルしませんでした。
Sample Projectを少し入れて、ここで何が起こっているのか見ることができます。