タッチスクリーンだから、指でドラッグしてもらいたくなります。そんな時に、どうやって実装するかを説明します。
Sponsor Link
Pan Gesture Recognizerを使います
自分で、タッチを検知して、動いたかどうか判断して・・・・みたいなことはしなくて良いようになってます。
具体的には、UIPanGestureRecognizerというクラスが用意されていて、このクラスをドラッグを検知したいViewControllerに配置すると、ドラッグした時に指定した関数を読んでくれます。
配置?
Storyboardを開いている時に、Libraryから、"Pan"で探してもらって、希望するViewController上にドロップすると、配置できます。
関数の指定方法
ボタンのアクションと一緒です。ViewControllerの隣に、PanGestureRecognizerが配置されているので、それを右クリックし、プルダウンメニューの"Sent action"を、IBActionで定義した関数と接続します。
こうすることで、ドラッグされた時に指定した関数が呼び出されます。(ちなみに、ドラッグと似ていますが、タップで呼び出して欲しい時には、TapGestureRecognizerを使う必要があります。)
関数の中での処理サンプル
ドラッグ開始なのか、移動中なのか、ドラッグし終わったのかについては、stateとして受け取ることができます。
guard let gesture = sender as? UIPanGestureRecognizer else { return } let delta = gesture.translation(in: self.view) // 移動量を検知して、なにか処理 if ((gesture.state == .began) || (gesture.state == .changed)) { // ドラッグ開始直後 or 移動中 } else { // ドラッグ終了 }
注意点
ビュー上で何か操作された時に関数が呼び出されるのではなく、「ドラッグしたか」・「タップしたか」が自動的に判別されて呼び出されます。つまり、OS側でドラッグやタップを判断することで、アプリごとに判定が違う等の不整合を防いでくれるようになってます。Sponsor Link