Swift UIGestureRecogniser关注手指

时间:2014-08-26 10:26:27

标签: ios swift uigesturerecognizer ios8

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

我喜欢的是一种手势,可以提供类似于您可以从屏幕顶部向下拉的通知框的结果。我一直在查看文档,但我似乎无法找到合适的手势。

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

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

1 个答案:

答案 0 :(得分:80)

您正在寻找 UIPanGestureRecognizer 。您将找到Apple文档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)  
    }  
}  

斯威夫特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的{​​{1}}中,创建识别器并将其添加到您希望能够拖动的视图中:

ViewController