【发布时间】:2016-02-07 03:48:05
【问题描述】:
我有一个角度,我正在根据屏幕中心的视图定位来计算。我需要一种方法将视图从当前位置移出屏幕,沿角度方向移动。
我确信有一种相当简单的方法可以计算新的 x 和 y 值,但我无法弄清楚数学。我想用动画来做,但是一旦我有了坐标,我就可以自己弄清楚。
有人有什么建议吗?
【问题讨论】:
标签: ios swift uiview uianimation
我有一个角度,我正在根据屏幕中心的视图定位来计算。我需要一种方法将视图从当前位置移出屏幕,沿角度方向移动。
我确信有一种相当简单的方法可以计算新的 x 和 y 值,但我无法弄清楚数学。我想用动画来做,但是一旦我有了坐标,我就可以自己弄清楚。
有人有什么建议吗?
【问题讨论】:
标签: ios swift uiview uianimation
如果您有角度,则可以通过获取正弦和余弦值来计算新坐标。你可以试试下面的代码
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)),最后将该矢量坐标添加到您需要设置动画的视图的中心。
【讨论】: