gire 180 grados para UIImageView y gire hacia atrás con la misma ruta

Recibí un button y quiero rotar la image dentro de él:

self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI);

La image es una flecha hacia arriba a flecha hacia abajo después de que el usuario hace clic en él. Al hacer clic en el button nuevamente, quiero que la flecha hacia abajo gire hacia arriba, pero es la misma rotation hacia la izquierda, pero solo quiero que la flecha vuelva hacia atrás a flecha hacia arriba

rotar código trasero:

self.DashButton.imageView.transform = CGAffineTransformIdentity;

Lo intenté

self.DashButton.imageView.transform = CGAffineTransformMakeRotation(-M_PI);

Lo que quiero es no rotar el círculo completo, solo rotar 180 y rotar -180, no rotar 360 completamente

en lugar de -M_PI, use -3.14159. Una especie de truco, pero debajo del código me salvó el día.

 self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI); self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI - 3.14159); 

lo que necesita es un ángulo negativo para rotarlo en la dirección opuesta

CGAffineTransformMakeRotation (180 * CGFloat (M_PI / 180))

CGAffineTransformMakeRotation (-1 * CGFloat (M_PI / 180))

Eche un vistazo a esta respuesta para get una explicación Acerca de la dirección de rotation CGAffineTransformMakeRotation?

 self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI); self.DashButton.imageView.transform = CGAffineTransformMakeRotation(0); 

¿Qué tal esto?

 self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI); self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI * 2); 

funciona en mi código 🙂

testing esto

 arrowLeft.transform = CGAffineTransformMakeRotation(180 *M_PI / 180.0); arrowLeft.transform = CGAffineTransformMakeRotation(0*M_PI/180); 

También se puede usar

 imageView.image = UIImage(cgImage: imageView.image!.cgImage! , scale: 1.0, orientation: .down) 

Swift 3:

 var rotationAnimation = CABasicAnimation() rotationAnimation = CABasicAnimation.init(keyPath: "transform.rotation.z") rotationAnimation.toValue = NSNumber(value: (Double.pi)) rotationAnimation.duration = 1.0 rotationAnimation.isCumulative = true rotationAnimation.repeatCount = 100.0 view.layer.add(rotationAnimation, forKey: "rotationAnimation") 

Aquí hay una funciones de extensión para UIView que maneja las operaciones de inicio y parada de rotation:

 extension UIView { func startRotation() { let rotation : CABasicAnimation = CABasicAnimation(keyPath: "transform.rotation.z") rotation.fromValue = 0 rotation.toValue = NSNumber(value: Double.pi) rotation.duration = 1.0 rotation.isCumulative = true rotation.repeatCount = FLT_MAX self.layer.add(rotation, forKey: "rotationAnimation") } func stopRotation() { self.layer.removeAnimation(forKey: "rotationAnimation") } } 

Ahora usando, cierre de UIView.animation:

 UIView.animate(withDuration: 0.5, animations: { button.transform = CGAffineTransform(rotationAngle: (CGFloat(Double.pi)) }) { (isAnimationComplete) in // Animation completed }