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)