voltear voltea porque las imagen frontal fotos espejo camara ios cocoa-touch

ios - voltea - iphone sdk CGAffineTransform obtener el ángulo de rotación de un objeto



voltear fotos espejo (4)

O puede usar las funciones acos y asin. Obtendrás exactamente el mismo resultado:

NSLog (@"%f %f %f", acos (MyView.transform.a), asin (MyView.transform.b), atan2(MyView.transform.b, MyView.transform.a) );

¿Cómo calculo el ángulo de rotación para cualquier objeto dado (es decir, una vista de uiimage)?


Puede obtener fácilmente el ángulo de rotación de esta manera:

CGFloat angle = [(NSNumber *)[view valueForKeyPath:@"layer.transform.rotation.z"] floatValue];

Por ejemplo:

view.transform = CGAffineTransformMakeRotation(0.02); CGFloat angle = [(NSNumber *)[view valueForKeyPath:@"layer.transform.rotation.z"] floatValue]; NSLog(@"%f", angle); // 0.020000

De la documentation :

Core Animation amplía el protocolo de codificación de valores-clave para permitir obtener y establecer los valores comunes de la matriz CATransform3D de una capa a través de las rutas clave. La Tabla 4 describe las rutas clave para las que las propiedades transform y sublayerTransform de una capa son clave-valor de codificación y observación conforme


Puedes probar con esto:

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { CGPoint newLocationPoint = [[touches anyObject] locationInView:self.superview]; int x = self.center.x; int y = self.center.y; float dx = newLocationPoint.x - x; float dy = newLocationPoint.y - y; double angle = atan2(-dx,dy); self.layer.position = self.center; self.layer.transform = CATransform3DMakeRotation(angle, 0, 0, 1); NSLog(@"touchesMoved %f %f %d,%d %f,%f angle:%f",newLocationPoint.x,newLocationPoint.y,x,y,dx,dy,angle); }


Técnicamente no se puede, porque la transformación puede incluir una operación sesgada que convierte la imagen en un paralelogramo y el ángulo de rotación ya no está definido.

De todos modos, ya que la matriz de rotación genera

cos(x) sin(x) 0 -sin(x) cos(x) 0 0 0 1

Puedes recuperar el ángulo con

return atan2(transform.b, transform.a);