在两个固定点之间滑动UIView

时间:2017-01-01 19:50:05

标签: ios swift uiview touch slide

我试图让UIView在滑动触摸的2点之间滑动。我尝试过使用UIPanGestureRecognizer。滑动很好但是当视图到达极限点时,会出现颠簸跳跃。这不顺利。这是我的手势功能:

    func wasDragged(gestureRecognizer: UIPanGestureRecognizer) {
    if gestureRecognizer.state == UIGestureRecognizerState.began || gestureRecognizer.state == UIGestureRecognizerState.changed {
        let translation = gestureRecognizer.translation(in: self.view)
        print(gestureRecognizer.view!.center.x)
        if(gestureRecognizer.view!.center.x <= self.view.frame.width) && (gestureRecognizer.view!.center.x >= self.view.frame.width - 100) {
            gestureRecognizer.view!.center = CGPoint(x: gestureRecognizer.view!.center.x + translation.x, y:  gestureRecognizer.view!.center.y)
        }else if (gestureRecognizer.view!.center.x > self.view.frame.width){
            gestureRecognizer.view!.center = CGPoint(x: self.view.frame.width, y: gestureRecognizer.view!.center.y)
        }else if (gestureRecognizer.view!.center.x < self.view.frame.width - 100){
            gestureRecognizer.view!.center = CGPoint(x: self.view.frame.width - 100, y: gestureRecognizer.view!.center.y)
        }

        gestureRecognizer.setTranslation(CGPoint(x: 0,y: 0), in: self.view)
    }


}

有任何帮助吗?感谢。

1 个答案:

答案 0 :(得分:1)

您的问题是您正在查看视图的位置,而不是应用当前移动后的位置。

我通过引入newx来修复您的代码,@IBAction func wasDragged(gestureRecognizer: UIPanGestureRecognizer) { if gestureRecognizer.state == .began || gestureRecognizer.state == .changed { let translation = gestureRecognizer.translation(in: self.view) print(gestureRecognizer.view!.center.x) let newx = gestureRecognizer.view!.center.x + translation.x if(newx <= self.view.frame.width) && (newx >= self.view.frame.width - 100) { gestureRecognizer.view!.center = CGPoint(x: newx, y: gestureRecognizer.view!.center.y) }else if (newx > self.view.frame.width){ gestureRecognizer.view!.center = CGPoint(x: self.view.frame.width, y: gestureRecognizer.view!.center.y) }else if (newx < self.view.frame.width - 100){ gestureRecognizer.view!.center = CGPoint(x: self.view.frame.width - 100, y: gestureRecognizer.view!.center.y) } gestureRecognizer.setTranslation(CGPoint(x: 0,y: 0), in: self.view) } } 显示了视图尝试移动到的位置。这是您想要约束的值。

setTranslation

您可能还想考虑更改最终gestureRecognizer.setTranslation(CGPoint(x: newx - gestureRecognizer.view!.center.x ,y: 0), in: self.view) 来电。如果用户尝试在视图已经处于其左边界时向左拖动视图然后(不抬起他们的手指)改变方向并向右移动,则即使他们的手指不再在视图上方,您的代码也会向右移动视图

通过以下更改,在用户的手指返回原始触摸点之前,视图不会向右移动:

environment.yml

试一试,看看你喜欢哪个。

相关问题