[英]How do I set limits in the y-axis for a Pan Gesture?
我想將我的 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 坐標超出指定范圍時,不要僅僅移動它,如果它太高,你仍然應該允許它向下移動,如果它太低,則向上移動。
指定在哪些情況下不希望移動圖像視圖會更容易:
此外,您可以通過快速拖動將其移出有效 y 范圍的原因是因為您只檢查圖像視圖的 y 坐標是否在移動之前的范圍內,而不是之后。 您應該在添加translation.y
時鉗制這些值。
@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)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.