限制平移手势向一个方向

问题描述 投票:1回答:1

想让图像只向上平移。

我试图编辑x和y坐标。试图根据翻译创建一个新的y变量,但不会改变。

@objc func handleVerticalPan(_ recognizer: UIPanGestureRecognizer)     {
    let translation: CGPoint = recognizer.translation(in: self.view)
    var newY = view.center.y + translation.y
        startingPoint = recognizer.view!.center
        recognizer.view?.superview?.bringSubviewToFront(recognizer.view!)
        if newY > translation.y
        {
            recognizer.view?.center = CGPoint(x: recognizer.view!.center.x, y: recognizer.view!.center.y + translation.y)
            newY = view.center.y + translation.y
            recognizer.setTranslation(CGPoint(x: 0, y: 0), in: self.view)
            //startingPoint = recognizer.view!.center
        }

它会上下颠簸,但我只想让它上升。

swift gesture
1个回答
0
投票

您正在比较错误的变量,并且Y值在向下方向上增加。你需要检查的是transition.y是否定的(即向上移动):

替换这个:

if newY > translation.y

有了这个:

if transition.y < 0

事实上,newY根本不需要:

@objc func handleVerticalPan(_ recognizer: UIPanGestureRecognizer) {
    let translation = recognizer.translation(in: self.view)
    guard let view = recognizer.view else { return }

    view.superview?.bringSubviewToFront(view)

    // If the movement is upward (-Y direction):
    if translation.y < 0
    {
        view.center = CGPoint(x: view.center.x, y: view.center.y + translation.y)
        recognizer.setTranslation(.zero, in: self.view)
    }
}

笔记:

其他变化:

  1. 使用guard安全地解开recognizer.view一次,而不是在整个代码中重复展开它。
  2. CGPoint(x: 0, y: 0)替换为.zero,其中Swift推断为CGPoint.zero,因为它期待一个CGPoint
© www.soinside.com 2019 - 2024. All rights reserved.