使用UIPanGestureRecognizer轻弹后计算UIView的最终位置

时间:2015-07-24 20:21:21

标签: ios uiview uipangesturerecognizer swift2

我有一个圆形UIView我可以用UIPanGestureRecognizer在屏幕上移动。在.Changed期间,UIView会被用户的手指移动。我什么都没有。为了#E ;;Ended'。我希望用户能够轻弹UIView,并在用户抬起手指后继续使用它的路径。路径的长度取决于平底锅的速度。

这可能与我目前的.Changed实施有关吗?如何计算UIView的最终位置?

1 个答案:

答案 0 :(得分:0)

查看CGAffineTransform的official documentation,您会发现以下段落:

vector

让我们将其翻译为代码:

let transform = self.view.transform
let xPosition = transform.a * transform.tx + transform.c * transform.ty + transform.tx
let yPosition = transform.b * transform.tx + transform.d * transform.ty + transform.ty
let targetTransform = self.transform(view: self.view,
                                     for: CGPoint(x: xPosition, yPosition))

然后我们可以将计算出的CGAffineTransform应用于我们的UIView

UIView.animate(withDuration: 0.2) {
  self.view.transform = targetTransform
}

请记住,动画持续时间未考虑当前速度。要获得更自然的行为,请考虑看看UIKit Dynamics