Ios 快速手势识别器跟随手指

Ios 快速手势识别器跟随手指,ios,swift,uigesturerecognizer,ios8,Ios,Swift,Uigesturerecognizer,Ios8,我正在用Swift制作一个iOS8应用程序。我希望用户能够使用手势来显示界面的某些部分。例如,用户向上滑动手指,他们向上滑动手指的视图移动到一边,跟随他们的手指显示下面的另一个视图 我想要的是一个手势,给出一个类似于通知框的结果,你可以从屏幕顶部下拉。我一直在看文档,似乎找不到合适的手势 我看到了一个名为UISweepGestureRecograiser的,但唯一的问题是,它不会跟随你的手指,它只是在我向上/向下滑动手指时运行一个函数 以下是文档页面: 您正在寻找UIPangestureReco

我正在用Swift制作一个iOS8应用程序。我希望用户能够使用手势来显示界面的某些部分。例如,用户向上滑动手指,他们向上滑动手指的视图移动到一边,跟随他们的手指显示下面的另一个视图

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

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

以下是文档页面:

您正在寻找UIPangestureRecognitor。你可以找到苹果的文档

下面是一个示例处理程序,它将用手指移动视图。在Interface Builder中,将
UIPangestureRecognitor
添加到您希望能够拖动的视图中。将代理设置为您的
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)  
    }  
}  
@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)
    }
}
Swift 3:

@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)  
    }  
}  
@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)
    }
}
当然,您可以通过编程方式添加
uipangestrerecognizer

viewdiload
中,为您的
ViewController
创建识别器并将其添加到您希望能够拖动的视图中:

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

你能解释一下手势识别器.setTranslation(CGPointMake(0,0),inView:self.view)吗?我理解上面的线,但我不能理解为什么我们需要一个CGPointZero作为识别器的translation@Happiehappie,当用户移动手指时,会重复调用handlePan处理程序。默认情况下,转换会告诉您自触摸开始以来移动了多远。由于我们正在使用手势识别器拖动视图,并且我们已经考虑了转换,因此我们将其设置回零,以便下次调用handlePan时,它将报告触摸距离上次调用handlePan的距离。现在,您很可能/几乎必须使用NSLayoutConstraint,只需轻松更改其值即可滑动该项。@Fattie如何操作?有什么例子吗?hi@J.Doe-“设置约束动画”是iOS编程中最基本的事情之一-你一直都在做。举个例子,这是我最有名的!关于“出现键盘时移动屏幕”的问题,回答说明如何执行此操作: