Lo siento si esto es obvio o está cubierto en otro lugar, pero he estado buscando en Google todo el día y no he encontrado una solución que realmente funcionó.¿Puedo mover el origen al hacer una transformación de rotación en Cuarzo 2D para el iPhone?
Mi problema es el siguiente: actualmente estoy dibujando una imagen en una pantalla completa de UIView, por ejemplo, diremos que la imagen está en la esquina inferior derecha de UIView. Me gustaría hacer una transformación de rotación (CGAffineTransformMakeRotation) en el centro de esa imagen, sin embargo, de forma predeterminada, el comando de rotación gira alrededor del centro de la UIView self. Como resultado, mi imagen se mueve alrededor de la pantalla cuando giro en lugar de permanecer en su lugar y girar alrededor de su propio centro.
Según lo que he reunido, necesito traducir mi contexto para que el origen (centro de UIView) esté en el centro de mi imagen, Girar y restaurar el contexto traduciendo al lugar original.
Lo siguiente es lo más cercano que he puesto a trabajar, pero el problema es que mientras la imagen está girando, se mueve hacia abajo mientras gira. Creo que esto es causado por la animación interpolación de la primera etapa de traducir y tercera etapa se traduce en lugar de simplemente darse cuenta de que el punto de inicio y el final de los traduce sería el mismo ...
// Before this i'd make a call to a function that draws a path to a passed in context
CGAffineTransform inverseTranslation = CGAffineTransformMakeTranslation(transX, transY);
CGAffineTransform translation = CGAffineTransformMakeTranslation(-transX, -transY);
CGAffineTransform rot = CGAffineTransformMakeRotation(3.14);
CGAffineTransform final = CGAffineTransformConcat(CGAffineTransformConcat(inverseTranslation, rot), translation);
// Then i apply the transformation animation like normal using self.transform = final etc etc
También he intentado cosas por el estilo CGContextTranslateCTM y CGContextSaveGState/UIGraphicsPushContext, pero estos parecen tener poco efecto.
He estado luchando con esto durante días y mi solución actual parece cercana, pero no tengo ni idea de cómo deshacerme de esa interpolación de traducción. ¿Alguien tiene una solución para esto o una mejor manera de hacerlo?
[update] Por el momento estoy dibujando mi imagen centrada en el centro de UIview y luego establezco la propiedad UIView.center en el origen que me gustaría rotar y luego hago el comando de girar. Parece un truco, pero hasta que consiga las traducciones reales, es mi única opción. Gracias!
comentario rápido editado para mostrar que debe usar constantes math.h cuando se trabaja con valores pi. M_PI_4, M_PI_2, M_PI son mejores y más precisos que todos los errores de redondeo :) –