ios - Swift UIGestureRecogniser 跟随手指

标签 ios swift uigesturerecognizer ios8

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

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

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

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

最佳答案

您正在寻找 UIPanGestureRecognizer。您会找到 Apple 文档 here .

这是一个示例处理程序,它将用您的手指移动 View 。在 Interface Builder 中,将 UIPanGestureRecognizer 添加到您希望能够拖动的 View 。将委托(delegate)设置为您的 ViewController。将 Action 设置为这个 Action :

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 创建识别器并将其添加到您希望能够拖动的 View 中:

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

关于ios - Swift UIGestureRecogniser 跟随手指,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25503537/

相关文章:

ios - Swift:删除影响或 Hook UIView 的约束?

ios - 在特定的 ViewController 中禁用页面滑动

ios - Objective-C 中的多个 NSURLConnection 委托(delegate)

ios - 控制拖动以在 Xcode 5 中创建 IBAction 以关闭键盘?

ios - Chromecast 视频无法自动播放 m3u8 文件

swift - 选项卡栏中所选图像的颜色在 iOS 7 中不会改变

ios - 在 UIPageViewController 中禁用滑动手势

ios - 如何只响应单击手势,同时让后面的对象响应双击?

objective-c - 顶部带有 uitextfield 的 UIkeyboard 弹出窗口(包括图片)

iphone - 在 else if 条件下迭代一个变量?