Swift UIGestureRecogniser关注手指

Fra*_*cis 32 uigesturerecognizer ios swift ios8

我正在使用Swift制作iOS8应用程序.我希望用户能够使用手势来显示界面的某些部分.因此,例如,用户将他们的手指向上滑动,他们滑动手指的视图移开,按照他们的手指显示下面的另一个视图.

我想要的是一个手势,给出一个类似于你可以从屏幕顶部拉下来的通知框的结果.我一直在看文档,我似乎无法找到合适的手势.

我看到一个名为UISwipeGestureRecogniser,但唯一的问题是,它不会跟随你的手指,它只是在我向上/向下滑动手指时运行一个功能.

这是文档页面:https: //developer.apple.com/documentation/uikit/uigesturerecognizer

vac*_*ama 88

您正在寻找UIPanGestureRecognizer.您可以在此处找到Apple文档.

这是一个用手指移动视图的示例处理程序.在Interface Builder中,将a添加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)  
    }  
}  
Run Code Online (Sandbox Code Playgroud)

斯威夫特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)
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,您可以通过UIPanGestureRecognizer编程方式添加:

viewDidLoadViewController创建的识别,并将其添加到您要能够拖动的观点:

    let gestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handlePan))
    self.someDraggableView.addGestureRecognizer(gestureRecognizer)
Run Code Online (Sandbox Code Playgroud)

  • @Happiehappie,handlePan处理程序在用户移动手指时被重复调用.默认情况下,翻译会告诉您自触摸开始以来移动了多远.由于我们使用gestureRecognizer拖动视图并且我们已经考虑了翻译,因此我们将其设置为零,以便下次调用handlePan时它将报告触摸从上一次调用移动到handlePan的距离. (3认同)