2011-08-26 12 views
26

Tengo varios UIImageViews dentro de un UIScrollView que quiero mover cuando el usuario pulsa uno de ellos. Es similar al comportamiento que obtienes cuando presiona prolongadamente un icono en el menú de su iPad/iPhone.Cómo detener una animación de UIView

Así que tienen la siguiente:

- (void)startWiggling { 

    for (UIImageView *touchView in [scrollView subviews]) { 

     [UIView beginAnimations:@"wiggle" context:nil]; 
     [UIView setAnimationDuration:0.1]; 
     [UIView setAnimationRepeatAutoreverses:YES]; 
     [UIView setAnimationRepeatCount:FLT_MAX]; 

     //wiggle 1 degree both sides 
     touchView.transform = CGAffineTransformMakeRotation(); 
     touchView.transform = CGAffineTransformMakeRotation(-0.0174532925); 

     [UIView commitAnimations]; 

    }  

} 

- (void)stopWiggling { 
    NSLog(@"Stop wiggling");  
} 

Esto funciona bien. El problema es ... ¿Cómo puedo hacerlo detener menear después de que el usuario haya presionado un botón? Tengo un botón y lo conecté, etc., y está llegando al método stopWiggling, así que está bien. Pero entonces ...

  1. ¿Cómo se quita la animación UIView de éstos UIImageViews?
  2. ¿Puedo vincular esta acción al usuario presionando el botón de inicio en su dispositivo?
+0

No estoy seguro de cómo responder a la primera poco, pero presionando el botón de inicio hará que la terminación de la aplicación a la pantalla principal. No hay forma de vincular esa clave porque está en el Sistema –

+0

@Suhail Patel, lo sé, pero pensé que podría haber una manera de anular el método 'applicationDidEnterBackground' y comprobar si las imágenes se mueven o no. Y si es así, detenga el movimiento y cancele la aplicación para que no entre en el modo de fondo. Pero no sé si es posible. – Jules

+0

No puede evitar que pase al fondo, pero puede detener el movimiento en ese método. No te da una opción ... –

Respuesta

70
#import <QuartzCore/QuartzCore.h> 

continuación

[myView.layer removeAllAnimations]; 

o

[self.view.layer removeAllAnimations]; 
+1

Tienes razón. Sabía sobre el método 'removeAllAnimations', pero ni siquiera me molesté en intentarlo, ya que no coloqué la animación en la capa de la vista, sino en la propia vista. Pero sorprendentemente esto funcionó .. =/ – Jules

+1

tan corto, ¡tan útil! – pmk

+0

el problema con esto es que si desea reanudar las animaciones en la misma capa, no funcionará nuevamente ya que la capa tiene todas las animaciones eliminadas de ella. –

Cuestiones relacionadas