create iphone animation uiimageview rotation

iphone - create - uiimageview set image swift



Animar UIImage giratorioVer (4)

Quiero rotar un UIImageView por aproximadamente 10 grados a la izquierda / derecha, pero tengo una animación suave, en lugar de un giro repentino que veo usando:

player.transform = CGAffineTransformMakeRotation(angle)

Cualquier ayuda apreciada, gracias.


Tengo un código que gira 360 grados:

- (void) runSpinAnimationOnView:(UIView*)view duration:(CGFloat)duration rotations:(CGFloat)rotations repeat:(float)repeat; { CABasicAnimation* rotationAnimation; rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; rotationAnimation.toValue = [NSNumber numberWithFloat: rotations * 2.0 /* full rotation*/ * rotations * duration ]; rotationAnimation.duration = duration; rotationAnimation.cumulative = YES; rotationAnimation.repeatCount = repeat; [view.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"]; }

llámalo: [self runSpinAnimationOnView:imgView duration:0.1 rotations:M_PI_4 repeat:10];

Y la animación gira algunos grados y otra vez:

- (void)rotateImage:(UIImageView *)image duration:(NSTimeInterval)duration delay:(NSTimeInterval)delay curve:(int)curve rotations:(CGFloat)rotations { [UIView animateWithDuration:duration delay:delay options:0 animations:^{ [UIView setAnimationCurve:curve]; image.transform = CGAffineTransformMakeRotation(rotations); } completion:^(BOOL finished){ [self rotateImage2:image duration:duration delay:delay curve:curve rotations:rotations]; ; }]; [UIView commitAnimations]; } - (void)rotateImage2:(UIImageView *)image duration:(NSTimeInterval)duration delay:(NSTimeInterval)delay curve:(int)curve rotations:(CGFloat)rotations { [UIView animateWithDuration:duration delay:delay options:0 animations:^{ [UIView setAnimationCurve:curve]; image.transform = CGAffineTransformMakeRotation(-rotations); } completion:^(BOOL finished){ [self rotateImage:image duration:duration delay:delay curve:curve rotations:rotations]; ; }]; [UIView commitAnimations]; }

Si desea rotar una vista de uiimage por aproximadamente 10 grados a la izquierda / derecha, llame: [self rotateImage:imgView duration:0.7 delay:0.0 curve:UIViewAnimationCurveEaseIn rotations:(M_PI/18)]; similar, algunos degres


Una solución Swift moderna, usando NSTimer y CGAffineTransformMakeRotation :

class Rotation: UIViewController { var timer = NSTimer() var rotAngle: CGFloat = 0.0 @IBOutlet weak var rotationImage: UIImageView! override func viewDidLoad() { super.viewDidLoad() activateTimer() } func activateTimer() { //(1) timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target:self, selector:#selector(Rotation.updateCounter), userInfo: nil, repeats: true) } func updateCounter() { //(2) var rotateLeft: Bool = true if rotateLeft { rotAngle -= 30.0 } else { rotAngle += 30.0 } //(3) UIView.animateWithDuration(2.0, animations: { self.rotationImage.transform = CGAffineTransformMakeRotation((self.rotAngle * CGFloat(M_PI)) / 180.0) }) } }

Cosas para notar:

  • Conecte el tomacorriente el UIImageView

  • Juega con el (1) ritmo del temporizador, (2) ritmo de animación y (3) ángulo de rotación para obtener los resultados deseados. Este conjunto de variables funcionó para mí.


Uso un código como este para lograr un efecto similar (aunque lo gire 360 ​​grados):

CABasicAnimation *rotate; rotate = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; rotate.fromValue = [NSNumber numberWithFloat:0]; rotate.toValue = [NSNumber numberWithFloat:deg2rad(10)]; rotate.duration = 0.25; rotate.repeatCount = 1; [self.view.layer addAnimation:rotate forKey:@"10"];

Uso un código muy similar a esto para hacer girar una vista de imagen.


[UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.25]; // Set how long your animation goes for [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; player.transform = CGAffineTransformMakeRotation(angle); // if angle is in radians // if you want to use degrees instead of radians add the following above your @implementation // #define degreesToRadians(x)(x * M_PI / 180) // and change the above code to: player.transform = CGAffineTransformMakeRotation(degreesToRadians(angle)); [UIView commitAnimations]; // The rotation code above will rotate your object to the angle and not rotate beyond that. // If you want to rotate the object again but continue from the current angle, use this instead: // player.transform = CGAffineTransformRotate(player.transform, degreesToRadians(angle));