围绕中心点旋转CGPoint

时间:2016-11-22 08:42:56

标签: ios swift xcode swift3 cgpoint

我一直试图找到一个使用2D变换矩阵围绕另一个CGPoint中心旋转CGPoint的例子,但我没有找到任何近期的运气。

有没有人设法实现这一目标?在这个用例中使用CGAffineTransform不是一个选项,因为我需要这些点。

提前致谢

2 个答案:

答案 0 :(得分:1)

围绕任意点旋转的最简单方法是将该点移动到零,旋转所需的角度,然后移回原点。 CGAffineTransform可以很好地与CGPoint一起使用:

let transform = CGAffineTransform(translationX:-center.x y:-center.y)
                    .rotate(by:angle)
                    .translateBy(x:center.x, y:center.y)
let newPoint = point.applying(transform)

答案 1 :(得分:0)

在我的用例中使用CGAffineTransform并不是一个真正的选项,但我能够使用此答案https://stackoverflow.com/a/35683523/3591202中的方法成功旋转一系列CGPoints。下面是我用来旋转CGPoints的扩展名。

func rotate(around center: CGPoint, with degrees: CGFloat) -> CGPoint {
    let dx = self.x - center.x
    let dy = self.y - center.y
    let radius = sqrt(dx * dx + dy * dy)
    let azimuth = atan2(dy, dx) // in radians
    let newAzimuth = azimuth + degrees * CGFloat(M_PI / 180.0) // convert it to radians
    let x = center.x + radius * cos(newAzimuth)
    let y = center.y + radius * sin(newAzimuth)
    return CGPoint(x: x, y: y)
}