我一直试图找到一个使用2D变换矩阵围绕另一个CGPoint中心旋转CGPoint的例子,但我没有找到任何近期的运气。
有没有人设法实现这一目标?在这个用例中使用CGAffineTransform不是一个选项,因为我需要这些点。
提前致谢
答案 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)
}