沿特定角度的方向移动视图

Move view in direction of specific angle

我有一个角度是根据屏幕中心的视图定位计算的。我需要一种方法来将视图从当前位置移出屏幕的角度方向。

我确定有一种相当简单的方法可以计算新的 x 和 y 值,但我一直无法弄清楚数学原理。我想用动画来做,但是一旦我有了坐标我就可以自己弄清楚了。

有人有什么建议吗?

如果你有角度,你可以通过获取正弦值和余弦值来计算新坐标。您可以尝试以下代码

let pathLength = 50 as Double // total distance view should move
let piFactor = M_PI / 180
let angle = 90 as Double // direction in which you need to move it
let xCoord = outView.frame.origin.x +  CGFloat(pathLength * sin(piFactor*angle)) //outView is name of view you want to animate
let yCoord = outView.frame.origin.y +  CGFloat(pathLength * cos(piFactor*angle))
UIView.animateWithDuration(1, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in
    self.outView.frame = CGRectMake(xCoord, yCoord, self.outView.frame.size.width, self.outView.frame.size.height)
        }, completion: { (Bool) -> Void in
})

对我来说,听起来您需要做的是将向量从极坐标表示(角度和半径)转换为笛卡尔表示(x 和 y 坐标),这应该相当容易。 你已经得到了角度,所以你只需要得到半径,也就是向量的长度。在你的情况下(如果我理解正确的话)是从需要动画的视图的当前中心到它的新位置的距离。虽然确切地知道这一点可能很复杂(因为这部分是你试图计算的),但为了安全起见,你可以采取足够大的值,这肯定会使视图脱离其超级视图框架。超级视图对角线的长度加上动画视图对角线的长度应该可以完成工作,或者更简单的只是取两个视图的高度和宽度的总和。

一旦你有了向量的完整极坐标表示(角度和半径),你可以使用 that simple formula 转换为笛卡尔表示 (x = r * cos(a), y = r * sin(a )) 最后将该矢量坐标添加到您需要设置动画的视图的中心。