Comment modifier le style d’animation d’un UIViewController modal?

J’affiche actuellement un UIViewController comme ceci:

[[self navigationController] presentModalViewController:modalViewController animated:YES]; 

et en le cachant comme ceci:

 [self.navigationController dismissModalViewControllerAnimated:YES]; 

L’animation est “glissez du bas” … puis redescendez. Comment puis-je changer le style d’animation? Puis-je le faire fondre / sortir?

À votre santé!

Marcus Zarra a publié une excellente solution sur la liste de diffusion du SDK:

 UIViewController *controller = [[[MyViewController alloc] init] autorelease]; UIViewAnimationTransition trans = UIViewAnimationTransitionCurlUp; [UIView beginAnimations: nil context: nil]; [UIView setAnimationTransition: trans forView: [self window] cache: YES]; [navController presentModalViewController: controller animated: NO]; [UIView commitAnimations]; 

Il existe des transitions pour le retournement et le curling. Si vous êtes sur le sharepoint fondre, essayez d’ajuster l’alpha de votre nouvelle vue:

 UIViewController *controller = [[[MyViewController alloc] init] autorelease]; controller.view.alpha = 0.0; [navController presentModalViewController: controller animated: NO]; [UIView beginAnimations: nil context: nil]; controller.view.alpha = 1.0; [UIView commitAnimations]; 

Cependant, ce que vous voulez probablement, c’est un fondu enchaîné ou au moins un fondu. Lorsque UINavigationController passe à une nouvelle vue, il supprime l’ancienne. Pour cet effet, il est sans doute préférable d’append une nouvelle vue à votre UIViewController existant et de réduire son alpha au fil du temps.

Remarque: Si vous n’êtes pas dans votre délégué d’application, [fenêtre personnelle] ne fonctionnera pas. Utilisez self.view.window, grâce au message de user412500 pour le signaler.

Pour iPhone 3.0+, un fondu enchaîné de base est le plus facile à faire:

 modalViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; [[self navigationController] presentModalViewController:modalViewController animated:YES]; 

Pour mettre à jour pour alpha fondu dans iOS 4:

 modalController.view.alpha = 0.0; [self.view.window.rootViewController presentModalViewController:modalController animated:NO]; [UIView animateWithDuration:0.5 animations:^{modalController.view.alpha = 1.0;}]; 

Il devrait être [self.view.window] pour que le code fonctionne

(du moins c’est comme ça dans ios 3.2)