スーパー ビューでタッチ イベントをオーバーライドすることで、このシステムを非常に簡単に作成できます。タッチが始まると、どのサブビューがヒットしたかがわかり、タッチが移動すると、その中心がタッチ位置に移動し、タッチが終了すると、ドロップされたビューを再度確認し、それらの 2 つのビューを交換します。
そのためにUIView
役立つ便利なメソッドがたくさんありpointInside
ます。あなたの目的のためだけに必要かもしれません。convertPoint
convertRect
pointInside
したがって、この場合、タイルを設定userInteractionEnabled
しNO
、スーパービューでタッチを処理する必要があります。ヒット チェックを行うには、for
ループを使用しますpointInside
が、タッチが終了したら、現在ドラッグされているビューのチェックをスキップする必要があります。
編集: UIPanGestureRecognizer のコメント
UIPanGestureRecognizer
実際に機能する可能性がありますが、メリットはほとんどありません。パンしているビューをすぐに取得できますが、それだけです。for
ループのようなものを介して、それが終わったビューを見つける必要があります。ジェスチャの位置は、スーパービュー座標に変換する必要があります (そうでない場合は、ビュー自体を移動するため、常に同じ座標を受け取ることになります)。欠点は、パンのイベントをすぐに取得できないことです。パンの開始を受け取るには、ビューを数ピクセルドラッグし始める必要があります。一方で、ビューをすぐに少し前面に移動するか、いくつかの操作を行う必要があります。このビューが移動可能であることをユーザーに通知する他のアニメーション。
とにかく、UIPanGestureRecognizer はパンを目的としており、そのように設計されています。目的に合わせて使用することは可能かもしれませんが、単純なタッチ イベントよりも多くの作業を行う必要があることに気付くかもしれません。