2012-09-06 10 views
8

en mi aplicación Tengo algunas animaciones. por ejemplo, tengo un botón en mi menú principal y al hacer clic en él comienza la animación (como mover un lugar, etc.) y al final de la animación se navega a otra página. Lo que necesito es deshabilitar la interacción del usuario durante la animación. porque durante la animación, si presiono el punto de inicio de mi botón, la página que se supone que se navega se abre dos veces. En resumen, si no dejo ningún tipo de interacción del usuario durante la animación, mi problema se resolverá. ¿Cómo puedo hacer eso?iphone development: deshabilitar la interacción del usuario durante la animación

+0

¿Cómo se anima la vista? ¿Método tradicional o usando bloques? –

+0

@ NSPostWhenIdle .. ¿Por qué está mal o stackOverflow no lo permite? – Rajneesh071

+0

ok señor ... la próxima vez me ocuparé de eso, ... :) – Rajneesh071

Respuesta

19

Antes de animación:

self.view.userInteractionEnabled = NO; 

y en el bloque finalización de animación:

self.view.userInteractionEnabled = YES; 
+0

si el usuario tiene dos botones en la vista, entonces ¿qué ...? – Rajneesh071

+1

deshabilitar la vista deshabilitará todas las subvistas – swebal

+0

Sí, tiene razón .... pero quiero decir que si el usuario tiene dos botones y quiere animación en ambos botones al mismo tiempo ... entonces, ¿cómo es posible de acuerdo con su código ... .. así que sugiero deshabilitar el botón es mejor enfoque .... – Rajneesh071

6

Simple, puede establecer setUserInteractionEnabled en NO antes de que comience la animación, y en el controlador de finalización de animaciones establecerlo de nuevo en YES.

[myObject setUserInteractionEnabled:NO]; 
[UIView animateWithDuration:1.0 animations:^{ 
    [myObject setTransform:CGAffineTransformMakeTranslation(100, 100)];//some animation 
}completion:^(BOOL done){ 
    if (done){ 
     [myObject setUserInteractionEnabled:YES]; 
    } 
}]; 
2
yourView.userInteractionEnabled = NO; 
[UIView animateWithDuration:1 animations:^ 
{ 
    //animations here      
} 
completion:^(BOOL finished) 
{ 
    yourView.userInteractionEnabled = YES; 
}]; 
1

Desactivar userIntrection de botón.

Btn.userInteractionEnabled = NO; 
5

Usted no tiene que cortar un poco con el bloque de terminación - hay una opción de animación que hace precisamente esto exactamente:

[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction 
    animations:^{ 
     // animations here 
    } 
    completion:nil]; 

Si ha configurado el UIViewAnimationOptionAllowUserInteraction, a continuación, la interacción del usuario habría sido permitido.

+1

La pregunta era cómo desactivar la interacción de usuario para todo durante la animación. Esta opción de animación permite la interacción del usuario para la vista que se anima. – AWrightIV

15

Esto podría ayudar:

// for ignoring event 
[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
[[UIApplication sharedApplication] endIgnoringInteractionEvents]; 

Código se verá así:

[UIView animateWithDuration:1.0 animations:^{ 
     //some animation 
     [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
    } 
    completion:^(BOOL done){ 
     if (done){ 
      [[UIApplication sharedApplication] endIgnoringInteractionEvents]; 
     } 
    } 
]; 
+1

Exactamente lo que necesitaba, ¡gracias! – iceydee

2

Para desactivar eventos táctiles en una vista,

[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 

Para habilitar eventos táctiles en una vista

[[UIApplication sharedApplication] endIgnoringInteractionEvents]; 
0

Tenía controlador de vista con iconos que abren páginas. Si el usuario estaba tocando rápidamente icon1 e icon2, se abrieron las 2 páginas.

para evitar que tenía este 2 líneas al inicio del evento del grifo este asegúrese de que la suceda lo que sea, el endIgnoring llamarán

-(void) on_image_tap:(UITapGestureRecognizer *) tapGesture 
{ 
    [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
    [[UIApplication sharedApplication] performSelector:@selector(endIgnoringInteractionEvents) withObject:nil afterDelay:0.5f]; 
Cuestiones relacionadas