El retraso animado con retraso de UIView no retrasa la animation

Estoy intentando realizar una animation en una label donde ocurre una animation de giro y después de que se hace y después de un retraso, el text de la label cambia.

Parece que el retraso nunca ocurre. El text cambia inmediatamente después de que el flip se completa, aunque estoy usando UIView animateWithDuration: 0.5 delay: 4.0 en el bloque de finalización. Si en su lugar realizo un performSelector con Delay en el bloque de finalización (la sentencia comentada) funciona como se espera. ¿Alguna idea de por qué se ignora el valor de retraso?

- (void) flipShapeWithText:(NSString *)text { [UIView transitionWithView:someLabel duration:0.15 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{ someLabel.text = text; }completion:^ (BOOL finished){ // [self performSelector:@selector(updateLabelText:) withObject: @"New Text" afterDelay:4.0]; [UIView animateWithDuration:0.5 delay:4.0 options: UIViewAnimationOptionTransitionCrossDissolve animations:^{ currentShapeNameLabel.text = @"New Text" ;} completion:nil]; }]; } 

El animateWithDuration:delay:options:animations:completion delay de animateWithDuration:delay:options:animations:completion especifica el retraso antes de que ocurra la animation. Está configurando el text dentro del bloque de animation para que después de que finalice el retraso, comiencen las animaciones que cambian inmediatamente el text ya que ese cambio no es animable. Para hacer lo que desea, cambie el text en el bloque de finalización de la siguiente manera:

  [UIView animateWithDuration:0.5 delay:4.0 options: UIViewAnimationOptionTransitionCrossDissolve animations:^{ // anything animatable } completion:^(BOOL finished) { currentShapeNameLabel.text = @"New Text" ;}]; 

Puede eliminar el retraso si desea que la animation comience de inmediato. Si desea que el cambio de text ocurra 4 segundos después de completar la animation, agregue ese retraso en el bloque de finalización con dispatch_after() o performSelector:withDelay:

En mi caso, el problema era que anteriormente en el código llamaba a UIView de UIView con un valor true . Después de cambiar eso a false , funcionó bien.