J'affiche actuellement un UIViewController comme celui-ci:
[[self navigationController] presentModalViewController:modalViewController animated:YES];
et le cacher comme ça:
[self.navigationController dismissModalViewControllerAnimated:YES];
L'animation est "glisser vers le bas" ... puis glisser vers le bas. Comment puis-je changer le style d'animation? Puis-je le faire fondre in/out?
À votre santé!
Marcus Zarra a publié une excellente solution à cela 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 de page. Si vous êtes déterminé sur la décoloration, vous pouvez essayer 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 du moins un fondu enchaîné. Lorsque l'UINavigationController bascule vers une nouvelle vue, il supprime l'ancienne. Pour cet effet, vous feriez probablement mieux d'ajouter simplement une nouvelle vue à votre UIViewController existant et de fondre son alpha au fil du temps.
Remarque: Si vous n'êtes pas dans votre application, le délégué [auto-fenêtre] ne fonctionnera pas. Utilisez self.view.window, grâce au message de user412500 pour l'avoir signalé.
Pour iPhone 3.0+, un fondu enchaîné de base est plus facile à faire comme ceci:
modalViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[[self navigationController] presentModalViewController:modalViewController
animated:YES];
Pour mettre à jour la décoloration alpha 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;}];
CA devrait etre [self.view.window]
pour que le code fonctionne
(au moins c'est comme ça dans iOS 3.2)