拖动 UIView 结束时失去手势

Dragging UIView loses the gesture when ended

我有以下拖动 UIView 的代码。视觉上一切正常。

func moveView(sender: UIPanGestureRecognizer) {
        let translate = sender.translationInView(self.view)
        if sender.state == UIGestureRecognizerState.Changed {
            sender.view!.center = CGPoint(x:sender.view!.center.x + translate.x, y:sender.view!.center.y + translate.y)
            sender.setTranslation(CGPointZero, inView: self.view)
        }
        if sender.state == UIGestureRecognizerState.Ended {
            let newX: CGFloat = sender.view!.center.x + translate.x
            let newY: CGFloat = sender.view!.center.y + translate.y
            sender.view!.center = CGPoint(x:newX, y:newY)
        }
}

然而,在完成此拖动后,视图似乎失去了手势连接,以至于我无法再次拖动它或触发任何与之关联的点击手势等。

如果我添加一个 NSLog,我可以看到点击视图曾经所在的位置会触发日志,但如果我点击实际的当前视图位置则不会。

我在 viewDidLoad

中建立了查看 thisView 的手势

let moveGesture = UIPanGestureRecognizer(target: self, action: Selector("moveView:"))
thisView.addGestureRecognizer(moveGesture)

我错过了什么让手势连接到新的视图位置?

谢谢。

我认为当你调用它时 sender.setTranslation(CGPointZero, inView: self.view) 也许你应该设置相对于 superview 而不是视图本身的翻译。设置相对于自身的平移会更改视图内容的位置,但不会更改视图区域,这意味着如果您将视图层设置为屏蔽其边界,您不应该看到视图初始区域之外的任何内容。
所以你应该sender.setTranslation(CGPointZero, inView: self.view.superview).