限制UIPanGestureRecognizer仅在特定视图内移动

时间:2017-12-01 06:31:39

标签: ios swift

我试图重新创建在iOS 11中看到的音量栏:

enter image description here

我尝试通过创建一个黑色(略微)透明的UIView,然后添加一个白色子视图来做到这一点。通过UIPanGestureRecognizer我试图给它实现我想要的功能,尽管我想限制这种运动:

  • 白条只能沿Y轴移动
  • 白条可以最大限度地移动到父母的顶部,而不是更远(同样适用于底部)

现在第一件事很容易弄清楚,但是现在我需要限制它,以便它不能比父UIView更高或更低

到目前为止,这是我的代码:

let gesture = UIPanGestureRecognizer(target: self, action: #selector(self.barWasDragged))
self.volumeBar.addGestureRecognizer(gesture)

 @objc func barWasDragged(gesture: UIPanGestureRecognizer) {
        switch gesture.state {
        case .began, .ended:
            viewCenter = self.volumeBar.center
        case .changed:
            let translation = gesture.translation(in: self)
            self.volumeBar.center.y = viewCenter!.y + translation.y
        default: break
        }
    }

但是现在,抑制它的最佳方法是什么,我可以设置UIPanGestureRecognizer的界限吗?

感谢。

- 编辑

只是澄清一下,

背景中的黑条是我的volumeView,de white(可拖动)栏是volumeBar

1 个答案:

答案 0 :(得分:0)

只要您知道volumeBar的框架,就可以执行此类操作

@objc func barWasDragged(gesture: UIPanGestureRecognizer) {
    switch gesture.state {
    case .began, .ended:
        viewCenter = self.volumeBar.center
    case .changed:
        let translation = gesture.translation(in: self)
        let newYValue = viewCenter.y + translation.y
        if newYValue > volumeBar.frame.origin.y && newYValue < (volumeBar.frame.origin.y+volumeBar.frame.size.height) {
            self.volumeBar.center.y = newYValue
        }
    default: break
    }
}