¿Cómo rotar correctamente una superposition en el map?

He creado una superposition personalizada que contiene una forma geométrica para una aplicación de iOS. Me gustaría rotar alnetworkingedor de su centro (o mejor dicho, el centro del límite de MapRect). Por lo que entiendo, usar CGContextRotateCTM (contextRef, angle) gira la superposition usando la esquina superior izquierda del BorderRectMap como origen, así que si giro mi superposition una pequeña cantidad en el sentido de las agujas del reloj, aparecerá hacia abajo y hacia la izquierda de su location anterior.

Pensé que si podía capturar el centro inicial del rectángulo delimitador de la superposition, luego el centro después de la rotation, entonces podría calcular la diferencia de coorderadas y reposicionar la superposition usando CGContextTranslateCTM. Mi problema con eso es que las ubicaciones del centro eran las mismas antes y después de la llamada CGContextRotateCTM. ¿Hay alguna forma de forzar esa llamada para que pueda get la nueva location del centro? ¿Hay una mejor manera de hacer esto?

Vi algunas references a usar la mitad del ancho y la altura de la superposition para reposicionar, pero no entiendo cómo eso ayuda, ya que es constante.

Gracias.

¿Ha intentado establecer un punto de anclaje para la rotation? Después de configurar el punto de anclaje, la rotation estará alnetworkingedor del centro de la vista.

Algunos como:

[yourView.layer setAnchorPoint:CGPointMake( 0.5, 0.5 )]; // center of the view 

Consulte los documentos de Apple para más detalles.

Aquí está mi solución, correr rápido 3:

Suponga que centerPoint es un CGPoint que desea girar.

 let a = sqrt(pow(centerPoint.x, 2.0) + pow(centerPoint.y, 2.0)) let sub1 = (centerPoint.y / a) * cos(angle / 2.0) let sub2 = (centerPoint.x / a) * sin(angle / 2.0) let deltaX = -2 * a * sin((0 - angle) / 2.0) * (sub1 + sub2) let sub3 = (centerPoint.x / a) * cos(angle / 2.0) let sub4 = (centerPoint.y / a) * sin(angle / 2.0) let deltaY = 2 * a * sin((0 - angle) / 2.0) * (sub3 - sub4) context.translateBy(x: deltaX, y: deltaY) context.rotate(by: angle)