Animación de alfa en UIView no funciona

Estoy haciendo un segue personalizado que se desvanece en negro, cambia el controller de vista y luego se desvanece a transparente. Desafortunadamente, parece que no puedo hacer eso. Aquí está el código:

- (void)perform { UIView *overlay = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [self.sourceViewController navigationController].view.frame.size.width, [self.sourceViewController navigationController].view.frame.size.height)]; [overlay setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.0]]; [[self.sourceViewController navigationController].view addSubview:overlay]; [UIView animateWithDuration:2.0 delay:0.0 options:(UIViewAnimationOptionCurveEaseIn) animations:^{ [overlay setAlpha:1.0]; }completion:^(BOOL finished) { [[self.sourceViewController navigationController] pushViewController:[self destinationViewController] animated:NO]; [UIView animateWithDuration:2.0 delay:0.0 options:(UIViewAnimationOptionCurveEaseIn) animations:^{ [overlay setAlpha:0.0]; }completion:^(BOOL finished) { [overlay removeFromSuperview]; NSLog(@"Done!"); }]; }]; } 

Entonces, lo que he hecho es agregar una UIView al controller de navigation que tiene un background negro y un alfa de 0. Luego, hago una animation para cambiar el alfa a 1, presionar el controller de vista de destino en el controller de navigation y luego anima de nuevo para borrar. Cuando hago esto, no pasa nada. Simplemente deja caer el controller de vista de destino en el controller de navigation sin ningún tipo de animation.

Curiosamente, si comienzo con un alfa de 1 y animo a 0 y luego return a 1, funciona (pero no es lo que quiero).

Estoy pensando que ocurre algo de optimization que excluye mi UIView clara y, por lo tanto, cambiar la transparencia carece de sentido.

¿Qué pasa si haces esto?

 ... [overlay setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:1.0]]; [overlay setAlpha:0.0]; [[self.sourceViewController navigationController].view addSubview:overlay]; ...