web-dev-qa-db-ja.com

Swift UIGestureRecogniserは指をたどります

Swiftを使用してiOS8アプリを作成しています。ユーザーがジェスチャーを使用してインターフェースの特定の部分を表示できるようにしたいと思います。そのため、たとえば、ユーザーは指を上にスライドさせ、指を上にスライドさせたビューが邪魔にならないように移動し、指に従って下の別のビューを表示します。

私が望むのは、画面の上部からプルダウンできる通知ボックスに似た結果を出すためのジェスチャーです。私はドキュメントを見てきましたが、適切なジェスチャーを見つけることができないようです。

UISwipeGestureRecogniserと呼ばれるものを見ましたが、唯一の問題は指に追従せず、指を上下にスライドさせるだけで機能を実行することです。

ドキュメントページは次のとおりです。 https://developer.Apple.com/documentation/uikit/uigesturerecognizer

29
Francis

あなたは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を追加できます:

viewDidLoadViewControllerで、認識エンジンを作成し、ドラッグできるようにするビューに追加します。

    let gestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handlePan))
    self.someDraggableView.addGestureRecognizer(gestureRecognizer)
84
vacawama