我有一个圆形的 UIView
,我可以使用 UIPanGestureRecognizer
在屏幕上移动它。在 .Changed
期间,UIView
随用户的手指移动。我没有'.Ended'。我希望用户能够轻弹 UIView,并让它在用户抬起手指后继续其路径。路径的长度将取决于锅的速度。
这可能与我当前的 .Changed
实现有关吗?如何计算 UIView
的最终位置?
最佳答案
查看 official documentation CGAffineTransform,你可以找到以下段落:
让我们将其转化为代码:
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 .
关于ios - 使用 UIPanGestureRecognizer 计算轻弹后 UIView 的最终位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31619131/