Swiftを使用してiOS8アプリを作成しています。ユーザーがジェスチャーを使用してインターフェースの特定の部分を表示できるようにしたいと思います。そのため、たとえば、ユーザーは指を上にスライドさせ、指を上にスライドさせたビューが邪魔にならないように移動し、指に従って下の別のビューを表示します。
私が望むのは、画面の上部からプルダウンできる通知ボックスに似た結果を出すためのジェスチャーです。私はドキュメントを見てきましたが、適切なジェスチャーを見つけることができないようです。
UISwipeGestureRecogniserと呼ばれるものを見ましたが、唯一の問題は指に追従せず、指を上下にスライドさせるだけで機能を実行することです。
ドキュメントページは次のとおりです。 https://developer.Apple.com/documentation/uikit/uigesturerecognizer
あなたはUIPanGestureRecognizerを探しています。 Apple Documentation here が見つかります。
指でビューを移動するサンプルハンドラーを次に示します。 Interface Builderで、UIPanGestureRecognizer
をドラッグできるようにするビューに追加します。デリゲートをViewController
に設定します。アクションをこのアクションに設定します。
Swift 2.X:
@IBAction func handlePan(gestureRecognizer: UIPanGestureRecognizer) {
if gestureRecognizer.state == .Began || gestureRecognizer.state == .Changed {
let translation = gestureRecognizer.translationInView(self.view)
// note: 'view' is optional and need to be unwrapped
gestureRecognizer.view!.center = CGPointMake(gestureRecognizer.view!.center.x + translation.x, gestureRecognizer.view!.center.y + translation.y)
gestureRecognizer.setTranslation(CGPointMake(0,0), inView: self.view)
}
}
Swift 3:
@IBAction func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) {
if gestureRecognizer.state == .began || gestureRecognizer.state == .changed {
let translation = gestureRecognizer.translation(in: self.view)
// note: 'view' is optional and need to be unwrapped
gestureRecognizer.view!.center = CGPoint(x: gestureRecognizer.view!.center.x + translation.x, y: gestureRecognizer.view!.center.y + translation.y)
gestureRecognizer.setTranslation(CGPoint.zero, in: self.view)
}
}
もちろん、プログラムでUIPanGestureRecognizer
を追加できます:
viewDidLoad
のViewController
で、認識エンジンを作成し、ドラッグできるようにするビューに追加します。
let gestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handlePan))
self.someDraggableView.addGestureRecognizer(gestureRecognizer)