簡體   English   中英

如何設置平移手勢的 y 軸范圍?

[英]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 < 161 並向上平移
  • y > 561 並向下平移

此外,您可以通過快速拖動將其移出有效 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM