拖动 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)
.
我有以下拖动 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)
.