ios objective-c rotation

ios - ¿Por qué una vista cambia de posición al girarla usando CGAffineTransformMakeRotation?



objective-c (3)

Tengo la siguiente animación súper simple, básicamente estoy rotando una vista de 2 radianes desde su ángulo / centro original, gira bien, mi único malentendido es por qué la vista se mueve desde su posición original cuando ocurre la rotación.

[UIView animateWithDuration:1.0 animations:^{ self.someView.transform = CGAffineTransformMakeRotation( 2 ); }];

¿Por qué la vista se mueve cuando se gira con el código anterior?

Actualmente estoy intentando discernir la información en CGAffineTransform Reference .

Comprender el punto de anclaje

Encontré este hilo pero no muestra una respuesta concreta. ¿Por qué rotar imageView, cambia de posición?

Muchas gracias


El "anclaje" de CGAffineTransformMakeRotation es la X, Y de la vista. Puedes intentar esto:

CGPoint center = self.someView.center; [UIView animateWithDuration:1.0 animations:^{ self.someView.transform = CGAffineTransformMakeRotation( 2 ); self.someView.center = center; }];


Necesita establecer el punto de anclaje de su vista para girar alrededor.

self.somview.layer.anchorPoint = CGPointMake(0.5, 0.5);

Luego comienza la rotación.
De la documentación de Apple

@property(nonatomic) CGAffineTransform transform
Los cambios en esta propiedad pueden ser animados. Utilice el método beginAnimations: context: class para comenzar y el método de clase commitAnimations para finalizar un bloque de animación. El valor predeterminado es cualquiera que sea el valor central (o el punto de anclaje si se cambia) Enlace: https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CALayer_class/Introduction/Introduction.html#//apple_ref/occ / instp / CALayer / anchorPoint


imagen desde aquí http://www.raywenderlich.com/9864/how-to-create-a-rotating-wheel-control-with-uikit
- Como ve, el punto de anclaje es el punto con el valor de 0.0 - 1.0 para X e Y cuando gira la rotación estará alrededor de estos puntos
NOTA: necesita importar QuartzCore


Estoy agregando otra respuesta debido a la solicitud @fs_tigre. El problema es con los diseños automáticos en su archivo xib, desafortunadamente no se sabe por qué afecta la transformación.
Ahora aquí están los pasos que hice para resolver el problema:

Primero, debes deshacerte de tu diseño automático (sí, tienes que hacerlo)
desmarca Usar el diseño automático

2- eliminar todas las restricciones y volver a escribir las máscaras para la vista que se rotará, como en la captura de pantalla (Aquí tengo mi cuadro azul, ver a la derecha, no se selecciona nada)

He hecho algunos cambios para el código de tu rotación

self.someView.layer.anchorPoint = CGPointMake(0.5, 0.5); // one degree = pi/180. so... // rotate by 90 CGFloat radians = (M_PI/180) * 90; [UIView animateWithDuration:1.0 animations:^{ self.someView.transform = CGAffineTransformRotate(self.someView.transform, radians); }];

Haga clic en rotate y ver la magia :)