2012-01-30 4 views
8

noté un comportamiento extraño. Cuando comienzo una animación y cambio la Vista (¡la vista no se cerrará!), Nunca se llama al controlador de finalización.bloque de finalización de uiview animar nunca invocó si la vista desapareció

[UIView animateWithDuration:0.1f 
          delay:0.0f 
         options:UIViewAnimationCurveEaseOut 
        animations:^(void){ 
         [myView setHidden:YES]; 
         myLabel.alpha = 0.0f; 
         someOtherView.frame = CGRectMake(130, bubbleBigRect.origin.y, 61, 65); 
         [button setHidden:YES]; 
        } 
        completion:^(BOOL finished){ 
         NSLog(@"Complete %d",finished); 
         [imageVIew setImage:[UIImage imageNamed:@"myPng.png"]];      
        }]; 
} 

¿hay alguna solución para esto?

Respuesta

-1

Mueva su llamada al [myView setHidden:YES] desde el bloque animations al bloque completion. Creo que eso probablemente ayude. Todavía puede establecer el valor alfa de myView en 0 durante el bloque animation (si desea que se desvanezca), o antes de toda la llamada al -[UIView animateWithDuration:delay:options:animations:completion:] si desea que desaparezca de inmediato.

5

No sé dónde escribirlo, pero obtengo lo mismo que tienes, pero en mi caso a veces se llamaba al bloque de finalización. Puede ser lo mismo.
Descubrí que si en el bloque de animación no había nada animado, por ejemplo, si configura alpha = 0 para uiview que es alfa ya es 0, o si configura offset de contenido para UIScrollView con el mismo offset de contenido (como en mi caso), el bloque de finalización no se llama.

1

Pon esto en tu bloque de animación, y pon todo lo que quieras hacer al finalizar en el método YOUR_SELECTOR. ¡Ahora puede hacer lo que quiera con su vista y todavía tener una forma de ejecutar algo al finalizar!

[UIView setAnimationDelegate:self]; 
[UIView setAnimationDidStopSelector:@selector(YOUR_SELECTOR)]; 
0

En mi caso el punto de vista que yo era animador tiene su conjunto de marco a (0, -568 320 568) y después de animación que se olvide de cambiar el marco a su posición requerida es decir (0,0,320,568) para que el bloque de terminación no estaba siendo llamado. Cambiar el marco de la vista animada hizo el trabajo por mí. Así que puedo decir si, por ejemplo, la vista no tiene nada que mostrar (ya que el marco no se configuró en la región visible). El bloque de finalización puede no ser llamado.

Cuestiones relacionadas