2011-08-11 9 views
7

Estoy tratando de hacer que un ícono "tiemble".Animación de iPhone "tambaleante" en UiImageView

Al cargar mi controlador de E crear un temporizador así:

[NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(shakeIphonePic) userInfo:nil repeats:YES]; 

Y aquí es mi método de agitador:

- (void)shakeIphonePic 
{ 
    [UIView animateWithDuration:0.09 
          delay:0 
         options:UIViewAnimationOptionAllowUserInteraction 
        animations:^{ 
         self.iphonePic.layer.transform = CATransform3DMakeRotation(DegreesToRadians(8.0), 0.0, 0.0, 1.0); 
        } 
        completion:^(BOOL finished) { 
         [UIView animateWithDuration:0.09 
             animations:^(void) { 
              self.iphonePic.layer.transform = CATransform3DMakeRotation(DegreesToRadians(-16.0), 0.0, 0.0, 1.0); 
             }]; 
        } 
    ]; 
} 

No es tan bonito como me esperaba, pero ... esto no es el problema principal.

Parece que ralentiza drásticamente el resto de mi IU, lo que antes era bueno.

¿Puede sugerirme una forma más eficiente de agitar mi ícono?

Respuesta

27
CABasicAnimation* anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 
[anim setToValue:[NSNumber numberWithFloat:0.0f]]; 
[anim setFromValue:[NSNumber numberWithDouble:M_PI/16]]; // rotation angle 
[anim setDuration:0.1]; 
[anim setRepeatCount:NSUIntegerMax]; 
[anim setAutoreverses:YES]; 
[self.viewYouAreShaking.layer addAnimation:anim forKey:@"iconShake"]; 

versión Swift

let anim=CABasicAnimation(keyPath: "transform.rotation") 
anim.toValue=NSNumber(double: -M_PI/16) 
anim.fromValue=NSNumber(double: M_PI/16) 
anim.duration=0.1 
anim.repeatCount=1.5 
anim.autoreverses=true 
viewYouAreShaking.layer.addAnimation(anim, forKey: "iconShake") 
+1

Una buena introducción es el capítulo de Animación de Programación iOS4 por Matt Neuburg. Un borrador público está disponible en http://www.apeth.com/iOSBook/ch17.html – Jano

+0

¿Cómo se desactiva la animación? Intenté '[self.viewYouAreShaking.layer removeAllAnimations];' pero la sacudida se detiene después de levantar el dedo. ¿Cómo puedo hacer que pase por alto el retoque de pulsación prolongada y solo reconozco el toque largo hacia abajo? – Mason

Cuestiones relacionadas