2011-03-03 9 views
6

Tengo el siguiente código:La interacción del usuario con UIView y animación bloques de terminación

[UIView animateWithDuration:2.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction 
    animations:^{ 
     imageView.bounds = endBounds; 
    } 
    completion:^(BOOL finished) { 
     [UIView animateWithDuration:2.0 delay:0.5 options:UIViewAnimationOptionAllowUserInteraction 
       animations:^{ 
        imageView.bounds = startBounds; 
       } 
       completion:^(BOOL finished) { 
         [imageView removeFromSuperview]; 
       }]; 
    }]; 

Además tengo:

[imageView setUserInteractionEnabled:YES]; 

y un conjunto reconocedor del grifo gesto que se encargará de que el usuario toque en imageView. Mientras ocurre la primera animación, el reconocedor de gestos se dispara como era de esperar. Pero si intento y hago clic en imageView durante la animación encadenada desde el bloque de finalización, no ocurre nada aunque he configurado la opción adecuada.

¿Alguien tiene alguna idea? Busqué en Google y no puedo encontrar una respuesta.

+0

Perdón por el formato de código deficiente ... –

+0

bienvenidos a SO. Agrego la etiqueta iphone a su pregunta (corríjalo si estuve equivocado), en el futuro intente primero poner etiquetas que describan la plataforma y el lenguaje de programación, y después de algunas etiquetas específicas –

+0

¡Gracias por la edición! Muy apreciado. –

Respuesta

5

me ocurrió una solución:

envuelvo la UIImageView en un UIView (I subclase UIView) con el punto mismos límites/centro como la imagen. Luego conecto el reconocedor de gestos al envoltorio, en lugar de a la imagen. Debido a que el rectángulo/punto central de los límites de la envoltura nunca cambian durante la duración de la animación, siempre está disponible como destino de un gesto.

Esto funciona bastante bien.

-j

+0

Esta es literalmente la única solución para este día. Estoy usando un UIViewPropertyAnimator y después de animar una vista con un reconocedor de gestos adjunto, pierde su reconocedor de gestos por alguna razón. La única solución consiste en colocar la vista que desea animar en una vista de contenedor y agregar un reconocedor de gestos a esa vista de contenedor. Luego, anima la vista (no la vista de contenedor). –

0

Cómo ves el mismo comportamiento si utiliza:

+ [UIView setAnimationDidStopSelector:] 

en lugar de utilizar los bloques?

+0

No lo he intentado. Ese es el viejo estilo, ¿verdad? Esta es mi primera incursión en el desarrollo de iPhone y pensé que probaría el enfoque recomendado primero con bloques. Puedo darle una oportunidad más adelante. –

+0

Por cierto, debería haber mencionado que 'startBounds' es el rectángulo original de cuando se cargó la imagen por primera vez y' endBounds' tiene las mismas dimensiones, excepto una altura de 0 (por lo que la imagen desaparece). ¿Es posible que, al finalizar, el SDK vea un cuadro delimitador con una altura de 0, suponga que la imagen ya no está visible y deshabilita toda interacción del usuario? –

+0

Actualización: se produce el mismo comportamiento, ya que no se activan los gestos. –

27

Al utilizar los nuevos bloques de animación, si quieres interacción del usuario para ser habilitado durante la animación, usted tiene que fijar en las opciones de máscara. Por ejemplo:

[UIView animateWithDuration:1.0 
         delay:0 
        options:UIViewAnimationOptionAllowUserInteraction 
       animations:^{ myView.alpha = 0.5; } 
       completion:NULL];
+3

Cuando la demora no es 0, no puede recibir toques. – Burak

Cuestiones relacionadas