【发布时间】:2017-01-01 19:50:05
【问题描述】:
我试图让 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)
}
}
有什么帮助吗?谢谢。
【问题讨论】:
-
您的代码非常有问题。通过使用一些中间局部变量,它可以写得更加整洁和紧凑。您不应该将
center设置为一个点,而将width设置为一个长度。为什么你的第三个else if测试中心x 是否小于 小于宽度-100?当然你会跳到宽度 - 100!这就是你的代码所说的。 -
好的,y 是固定的。我正在使用坐标在 2 个点之间移动 customView:初始视图的宽度和这个宽度 -100。
-
“初始视图的宽度”不是点,不是坐标。这是一个长度。
-
宽度是一个可以用作x坐标的值。无论如何,问题不在这里。我尝试设置正常坐标,但问题仍然存在。当自定义视图到达边界时,它会向后跳一点。我不想让它跳回来。我希望它是光滑的。我希望你明白我的意思......
-
好的,让我们专注于跳跃。假设我将视图快速移动到
width-105。然后立即将其设置为width-100。那是一个跳跃!我看不出这里有什么惊喜。
标签: ios swift uiview touch slide