4

J'essaie de basculer entre deux contrôleurs Modal View différents et d'essayer une animation fluide. Idéalement, j'aimerais que l'animation ressemble à la nouvelle vue modale qui devient une vue modale par rapport à la vue modale actuelle. Par souci de cohérence dans mon application, je n'ai besoin de limiter qu'une seule couche de contrôleurs Modal View affichés à un moment donné.Transition animée entre deux ViewController modaux

Actuellement, je n'ai plus que la vue modale existante sans animation, puis j'anime la vue modale suivante sur le RootController, mais cela n'a pas l'air sympa.

Merci

Répondre

7

Vous pouvez simplement présenter le contrôleur 2e vue du modèle au cours de la première utilisation de la transition par défaut. Il semble que votre deuxième vue de modèle soit allouée et initialisée dans le même contrôleur de vue que votre première vue de modèle. Si tel est le cas, pensez à refactoriser votre code afin que le premier contrôleur de vue de modèle présente le deuxième contrôleur de vue modale. Faire cela afficherait l'un sur l'autre comme vous voulez.

Si vous devez conserver le code de présentation des deux contrôleurs de vue modale dans le même contrôleur de vue racine, vous pouvez créer une méthode de délégation. Cela enverrait un message du premier contrôleur de vue modale au contrôleur de vue racine qui le présentait, en transmettant une référence au premier contrôleur de vue modale. Ensuite, utilisez cette référence pour indiquer au premier contrôleur de vue modale de présenter le deuxième contrôleur de vue modale.

Je recommanderais certainement l'ancienne solution, car elle est plus claire avec moins de chance d'introduire un cycle de rétention.

En réponse à votre clarification:

à la transition entre les deux, essayez:

Dans votre instance ModalViewControllerOne qui est déjà affiché à partir d'une session précédente:

self.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
[self dismissModalViewControllerAnimated:YES]; 

Dans -viewDidAppear: de votre RootViewController

L'idée est de dissoudre le premier contrôleur de vue modale dans le contrôleur racine, puis de dissoudre immédiatement le nouveau contrôleur de vue modale sur l'écran. Si c'est juste la vue qui est différente entre les écrans de démarrage, vous pouvez avoir deux contrôleurs de vue, avoir un contrôleur de vue avec logique qui change simplement une vue pour l'autre en fonction de l'URL entrée et utiliser une animation lors de l'échange entre les vues.

+0

Chacun de ces affichages modaux est essentiellement un écran splash/login différent. Selon l'URL utilisée pour entrer dans l'application, j'affiche un splash modal différent. Donc, si splash 1 vient d'une utilisation antérieure de l'application et qu'ils entrent dans l'application à partir d'une URL demandant splash 2, je voudrais une transition en douceur de splash 1 à splash 2 sans avoir les deux, l'un sur l'autre. – FishStix

+0

J'ai mis à jour ma réponse pour vous. – Andrew

+0

Je garde juste un UINavigationController comme mon "modalController" et passe une pile de ViewControllers à une méthode de délégué et si le window.rootController a un "presentController" alors il présente le modalController et je remplace juste les viewControllers par une animation. Sinon, je définis toujours les contrôleurs de vue et la fenêtre d'appel de modalController.rootController presentModalViewController: modalController – FishStix

Questions connexes