2008-10-26 6 views
69

Je suis actuellement UIViewController déployaient comme ceci:Comment puis-je changer le style d'animation d'un UIViewController modal?

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

et en se cachant comme ceci:

[self.navigationController dismissModalViewControllerAnimated:YES]; 

L'animation est « glisser vers le haut à partir du bas » ... puis faites glisser vers le bas. Comment puis-je changer le style d'animation? Puis-je le faire disparaître/disparaître?

À la votre!

Répondre

60

Marcus Zarra posté une excellente solution pour 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 y a des transitions pour les retournements et page-curling. Si vous définissez sur la décoloration, peut essayer d'ajuster votre nouvelle vue alpha:

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 sans doute est un fondu enchaîné, ou tout au moins un fondu sur. Lorsque UINavigationController bascule vers une nouvelle vue, il supprime l'ancien. Pour cet effet, vous feriez probablement mieux d'ajouter une nouvelle vue à votre UIViewController existant et de faire disparaître son alpha au fil du temps.

Remarque: Si vous n'êtes pas dans votre application, le délégué [auto-window] ne fonctionnera pas. Utilisez self.view.window, grâce à la publication de user412500 pour le signaler.

+5

C'est vieux! Voir la réponse de Simo Salminen ci-dessous! MrDatabase vous devriez changer ce –

194

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]; 
+2

Fonctionne parfaitement !!! Il m'a fallu quelques secondes pour réaliser que la transition devait être appliquée au viewController qui est présenté et non à soi-même. – looneydoodle

+0

Vous pouvez le faire dans Interface Builder, en ajoutant une transition modale et en définissant la transition sur 'Cross Dissolve', par exemple. – paulvs

2

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

(au moins c'est la façon dont il est dans ios 3.2)

8

pour mettre à jour pour l'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;}]; 
+1

Cela a très bien fonctionné pour moi. – zekel

Questions connexes