Animation personnalisée pour pousser un UIViewController

Je veux montrer une animation personnalisée en poussant un contrôleur de vue: je voudrais réaliser quelque chose comme une animation “élargie”, cela signifie que la nouvelle vue se développe à partir d’un rectangle donné, disons [100 100 220 380] en plein écran.

Des suggestions pour commencer, respectivement des documents, des tutoriels, des liens? 🙂


Bien. Je pourrais développer l’animation avec le code suivant:

if ([coming.view superview] == nil) [self.view addSubview:coming.view]; coming.view.frame = CGRectMake(160,160,0,0); [UIView beginAnimations:@"frame" context:nil]; [UIView setAnimationDuration:4]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [coming viewWillAppear:YES]; [going viewWillAppear:YES]; coming.view.frame = CGRectMake(0, 0, 320, 480); [going viewDidDisappear:YES]; [coming viewDidAppear:YES]; [UIView commitAnimations]; 

Mon affichage est correctement affiché, mais malheureusement la barre de navigation n’est pas mise à jour. Est-il possible de le faire manuellement?


Dans l’exemple de code, une fonction est appelée toutes les 0,03 secondes qui met à jour la transformation de la vue. Malheureusement, lorsque je pousse un UIViewController , je ne suis pas en mesure de redimensionner le cadre de la vue … suis-je?

Ce que vous pouvez faire est de pousser le contrôleur de vue suivant, mais ne l’anime pas, comme ceci:

 [self.navigationController pushViewController:nextController animated:NO]; 

… et ensuite, dans le contrôleur de vue qui est introduit, vous pouvez faire une animation personnalisée de sa vue en utilisant CoreAnimation. Cela pourrait être mieux fait dans la méthode viewDidAppear:(BOOL)animated .

Consultez le Guide d’animation de base sur la façon de faire l’animation. Regardez particulièrement l’animation implicite.

EDIT: lien mis à jour

J’utilise la fonction suivante (ajoutée à UINavigationController ) pour personnaliser l’animation push:

 - (void) pushController: (UIViewController*) controller withTransition: (UIViewAnimationTransition) transition { [UIView beginAnimations:nil context:NULL]; [self pushViewController:controller animated:NO]; [UIView setAnimationDuration:.5]; [UIView setAnimationBeginsFromCurrentState:YES]; [UIView setAnimationTransition:transition forView:self.view cache:YES]; [UIView commitAnimations]; } 

Je suppose que vous pouvez adapter ce code pour faire l’animation de votre choix.

Le code que vous recherchez:

  [UIView beginAnimations:@"View Flip" context:nil]; [UIView setAnimationDuration:0.80]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO]; [self.navigationController pushViewController:menu animated:YES]; [UIView commitAnimations]; 

Heinrich,

J’ai créé un didacticiel sur YouTube qui montre comment agrandir et réduire les vues, comme dans l’application iPhone de Facebook.

J’espère que cela peut vous aider: Comment faire des vues en expansion / rétrécissement sur iPhone SDK

Adam

@zoul: ça a bien marché! Je viens de changer “self” en “self.navigationController” et “self.view” en “self.navigationController.view” Je ne sais pas si cela était nécessaire, mais cela a fonctionné. Et @crafterm, comme pour revenir en arrière, créez votre propre leftBarButtonItem en ajoutant ce code dans viewDidLoad ou ViewWillAppear:

 //add your own left bar button UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonTapped)]; self.navigationItem.leftBarButtonItem = backButton; [backButton release]; 

Ensuite, j’ai juste ajusté la fonction push et rendu cette fonction popWithTransition que j’ai appelée dans ma méthode -backButtonTapped.

 - (void) popWithTransition: (UIViewAnimationTransition) transition { [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:.75]; [UIView setAnimationBeginsFromCurrentState:YES]; [UIView setAnimationTransition:transition forView:self.navigationController.view cache:YES]; [UIView commitAnimations]; [self.navigationController popViewControllerAnimated:NO]; } 

Notez que l’appel popViewController a été déplacé jusqu’à la fin, après l’animation. Je ne sais pas si c’est casher, mais encore une fois, ça a fonctionné.

Ce que vous voulez, ce sont les téléchargements du chapitre 2 du livre de recettes des développeurs d’iphone . Regardez spécifiquement l’échantillon affineRotate, même si l’un des principaux échantillons d’animatin vous aidera.

Jetez un coup d’œil à ADTransitionController , une solution de remplacement pour UINavigationController avec des animations de transition personnalisées (son API correspond à l’API de UINavigationController) que nous avons créée chez Applidium.

Vous pouvez utiliser différentes animations prédéfinies pour les actions Push et Pop telles que Swipe , Fade , Cube , Carrousel , etc. Dans votre cas, l’animation que vous demandez est celle appelée Zoom .