如何解决如何在“平移手势”的y轴上设置限制?
我想将imageview限制为特定的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)
}
解决方法
当图像视图的y坐标超出指定范围时,不要只是完全不移动图像视图,还应该允许图像视图过高而向下移动,而过低则向上移动。 / p>
指定不要在哪种情况下希望移动图像视图会更容易:
- 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)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。