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

标签 ios uiview uipangesturerecognizer swift2

我有一个圆形的 UIView,我可以使用 UIPanGestureRecognizer 在屏幕上移动它。在 .Changed 期间,UIView 随用户的手指移动。我没有'.Ended'。我希望用户能够轻弹 UIView,并让它在用户抬起手指后继续其路径。路径的长度将取决于锅的速度。

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

最佳答案

查看 official documentation CGAffineTransform,你可以找到以下段落:

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 .

关于ios - 使用 UIPanGestureRecognizer 计算轻弹后 UIView 的最终位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31619131/

相关文章:

ios - 关于 UIScrollView 作为启用 UIPanGesture 的 View 的 subview 的问题

ios - 从平移手势中剪切对角线移动

ios - swift + alamofire 出现错误 "Connection was lost"时抓取下载的数据

ios - 具有复杂单元格的 UITableView 缓慢且滞后

ios - 将 subview 添加到 tableViewController 中的主视图将 subview 添加到 TableView 而不是 swift 中的 View

ios - 跨多个 View Controller 使用共享背景 View 的最佳实践是什么?

ios - 如何为 UINavigationController 启用全屏平移

ios - AppDelegate 方法未被调用

ios - Cordova 写入 WWW 目录 (iOS)

ios - 动画持续时间 :delay:options:animations:completion: not working (strangely)