如何设置平移手势的 y 轴范围?
Posted
技术标签:
【中文标题】如何设置平移手势的 y 轴范围?【英文标题】:How do I set limits in the y-axis for a Pan Gesture? 【发布时间】:2020-08-20 05:29:55 【问题描述】:我想将我的图像视图限制为特定的 y 坐标,但每次我将它拖到 2 坐标之上或之下时,视图都会卡住并且不再移动。此外,如果我拖动得足够快,imageView 会高于或低于我限制的坐标。
@IBAction func handlePan(_ gesture: UIPanGestureRecognizer)
// 1
let translation = gesture.translation(in: view)
// 2
guard let gestureView = gesture.view else
return
if gestureView.center.y >= 161 && gestureView.center.y <= 561
gestureView.center.y = gestureView.center.y + translation.y
gesture.setTranslation(.zero, in: view)
// 3
gesture.setTranslation(.zero, in: view)
【问题讨论】:
使用一个点作为最后一个点作为类变量...检查而不是检查gestureView.center
【参考方案1】:
当它的 y 坐标超出指定范围时,您仍然应该允许图像视图向下移动,如果它太高,则向上移动,如果它太低,则向上移动,而不是根本不移动图像视图。
指定在哪些情况下不希望移动图像视图会更容易:
y y > 561 并向下平移另外,您可以通过非常快速的拖动将其移出有效 y 范围的原因是因为您只检查图像视图的 y 坐标是否在移动之前的范围内,而不是之后。在添加 translation.y
时,您应该改为 clamp 值。
@IBAction func handlePan(_ gesture: UIPanGestureRecognizer)
// 1
let translation = gesture.translation(in: view)
// 2
guard let gestureView = gesture.view else
return
// in these two cases, don't translate the image view
if (gestureView.center.y < 161 && translation.y < 0) ||
(gestureView.center.y > 561 && translation.y > 0)
gesture.setTranslation(.zero, in: view)
return
// clamping the translated y
gestureView.center.y = min(max(gestureView.center.y + translation.y, 161), 561)
gesture.setTranslation(.zero, in: view)
【讨论】:
现在它根本不起作用。图像视图只是上升并停在极限处。根本下不去,图片卡在顶部 @DisplayName555 我才意识到我打错了。 Now I corrected it你在应用我的答案时意识到了吗? 哦,是的,感谢您修改它,因为我真的很困惑。现在完美运行以上是关于如何设置平移手势的 y 轴范围?的主要内容,如果未能解决你的问题,请参考以下文章