Tener problemas para permitir la interacción en la animation UIView

Tengo el siguiente bloque de código para desvanecer una introView (UIView)

// Hide intro view after 5 seconds [UIView animateWithDuration: 1.0 delay: 5.0 options: (UIViewAnimationOptionAllowUserInteraction |UIViewAnimationOptionCurveLinear) animations: ^{ introView.alpha = 0; } completion: ^(BOOL finished) { [introView removeFromSuperview]; }]; 

Tengo un button de salto dentro de la introducción pero no hay interacción alguna, ¿me estoy perdiendo algo? Tengo que agregar que esta es una aplicación universal que apunta a 3.2 y estoy usando XCode 4.2

¿Está configurando su button alfa a 0?
Si es así, aquí hay algo interesante sobre la animation.

Lo que ve en la pantalla durante la animation no es lo que ve la aplicación. En el momento en que establece su alfa a 0, el alfa es 0 para esa vista, incluso si todavía la está viendo en la pantalla.
Además, una vista que tenga un alfa más bajo que 0.05 (no recuerde el número exacto) no obtendrá un evento táctil.

Lo que puede hacer es implementar el - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event de la vista de supervisión de esa vista. o los touchesEnded... como quieras.
(Asumiendo que su configuration no es alfa a 0.)

Por lo tanto, puede probar si hay un toque que ocurre donde está el button, o simplemente eliminar ese button y dejar que cualquier toque en la pantalla cancele su animation.


Quizás también te interese esta publicación:
Core Animation, position animada inesperada y valores de hitTest

Estoy bastante seguro de que esto es imposible antes de 4.0:

UIView userInteractionEnabled Docs

Durante una animation, las interacciones del usuario se desactivan temporalmente para todas las vistas involucradas en la animation, independientemente del valor de esta propiedad. Puede deshabilitar este comportamiento especificando la opción UIViewAnimationOptionAllowUserInteraction al configurar la animation.

Parece que tiene poco sentido dirigir la 3.2 en una aplicación que aún no ha lanzado.

Tuve el mismo problema con un button que animé con cambiar el alfa. Escuchando la respuesta de VinceBurn …

Lo que ve en la pantalla durante la animation no es lo que ve la aplicación. El momento> establece su alfa en 0, el alfa es 0 para esa vista, incluso si todavía lo está viendo en la> pantalla. Y la vista que tiene un alfa más bajo que 0.05 (no recuerdo el número exacto) no recibirá touch> evento.

… la solución simple de solo hacer el mínimo alfa 0.1 en lugar de 0.0 funcionó para mí:

 [UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse | UIViewAnimationOptionAllowUserInteraction animations:^{ self.myButton.alpha = 0.1f; } completion:^(BOOL finished){ }] 

El button registró el touchUpInside todo el time sin necesidad de un método adicional, y prácticamente no hubo diferencias en la apariencia, desde tomar el alfa a cero.

Esto no funcionará en iOS 3.2 ya que los bloques solo están disponibles en iOS4.
tendrás que usar las técnicas de animation estándar, en un hilo separado para que no bloquees la interfaz

 [UIView beginAnimations:nil context:nil]; [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:view cache:YES]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationDuration:1.0]; [view1 setHidden:TRUE]; [UIView commitAnimations]; 

Encontré otra circunstancia que podría causar esto. No he visto esta respuesta en ningún otro lado. No trata con alfa en absoluto.

Si usa un retraso en la llamada a UIView.animate (), entonces, incluso si especifica la opción .allowUserInteraction , la vista NO recibe toques durante el período de retraso. No tengo idea de por qué, pero podría ayudarlo moviendo el bloque de código a otra function y usando un selector de ejecución después de los mismos segundos de retraso, y en el bloque ejecuto el código sin demora.