Interacción del usuario en un UIB animado

Estoy intentando hacer una pequeña aplicación en Xcode 4.2 apuntando al iPhone. Lo que quiero es un UIButton que anima la pantalla, y cuando lo presionas, estableces su alfa a 0. Encontré un método de la class UIView que fue capaz de lidiar con las interacciones del usuario, y llegué a este código:

  [UIView animateWithDuration:3.0 delay:0 options: UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionAllowAnimatedContent animations: ^{ CGRect myRect = enemy1.frame; myRect.origin.y = 300; myButton.frame = myRect; } completion:nil]; 

Ahora, esto hace las animaciones correctamente, pero la cosa es que instantáneamente establece el origin.y a 300, lo que significa que no puedo presionar el button "a medida que se desliza hacia abajo". Solo puedo presionarlo en ese origin.y location 300, y puedo presionarlo aunque todavía no haya animado hasta el final.

Los events táctiles no funcionan correctamente en iOS mientras una vista está animando. Puede tocar vistas cuando se encuentra en la location de origen o tocar vistas cuando se encuentra en la location de destino, pero los events táctiles no se activarán correctamente para la position en la que se encuentra mientras se está animando.

Para hacer frente a esto, debe deshabilitar la interacción del usuario en la vista mientras se está animando y olvidarse de la idea de tocar cosas mientras se animan, o puede cubrir la vista animada con otra vista estacionaria que tiene habilitada la interacción del usuario y, por lo tanto, intercepta el toque events, luego trata de averiguar si el evento táctil está en el área de visualización de animaciones. Puede hacer esto usando:

 CGPoint animatingViewPosition = [(CALayer*)[animatingView.layer presentationLayer] position]; 

Puedes usar,

 button.frame = CGRectMake(100, 100, 60, 40); [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:4.0]; button.frame = CGRectMake(100, 300, 60, 40); [UIView commitAnimations];