Est-il possible d'utiliser les transitions iOS 7 UIViewController (interactives spécifiquement) avec des contrôleurs de vue enfants ?

StackOverflow https://stackoverflow.com//questions/22003967

Question

Il existe de nombreux didacticiels sur l'utilisation de la nouvelle API de transitions iOS 7 UIViewController et de la nouvelle API de transition interactive.Cependant, aucun d'entre eux ne semble faire référence à l'ajout et à la suppression de contrôleurs de vue enfants de manière interactive, malgré le fait que dans la vidéo de la WWDC 2013 sur les transitions personnalisées UIViewController, l'employé d'Apple montre ce que j'imagine être un contrôleur de vue enfant présenté avec une transition personnalisée :

enter image description here

(Je suppose que cela, car un contrôleur de vue est apparemment affiché au-dessus d'un autre.Je ne pense pas que vous puissiez passer à un nouveau UIViewController tout en gardant l'autre visible derrière...)

Est-il possible de réaliser une telle chose avec des contrôleurs de vue enfants ?

Dans ma situation spécifique, j'ajoute un UIPageViewController galerie d'images en tant que contrôleur de vue enfant, mais vous pouvez toujours voir le contrôleur de vue auquel il a été ajouté si l'image est UIPageViewController ne prend pas tout l'écran.J'ai également ajouté la possibilité de faire glisser une image hors de l'écran (semblable à la fermeture multitâche d'iOS 7) et j'aimerais que ce soit une pop de contrôleur de vue interactive.

Existe-t-il des tutoriels pour ce genre de chose ?Est-ce même possible ?Serait-ce mieux fait avec presentViewController d'une manière ou d'une autre, cela me permettrait de voir le contrôleur de vue ci-dessous ?

Était-ce utile?

La solution

Si vous regardez à nouveau la vidéo, vous remarquerez à 12h15 qu'il fait référence au style de présentation pris en charge. UIModalPresentationCustom.Ce style de présentation signifie que la vue du contrôleur de vue « de » n'est pas supprimée de la hiérarchie des vues, ce qui vous permet de créer vos propres formulaires.Donc, dans votre cas, vous feriez ce qui suit :

//insert code where you want the presentation to begin

UIPageViewController *pageVC = [[UIPageViewController alloc] init];
pageVC.modalPresentationStyle = UIModalPresentationCustom;
id<UIViewControllerTransitioningDelegate> transitionDelegate = [self transitionDelegate];
[self presentViewController:pageVC animated:YES completion:nil];

votre objet de transition d'animation serait chargé de garantir que le cadre de vos contrôleurs d'affichage de page n'est pas en plein écran.Méfiez-vous simplement des implications de la gestion simultanée de deux contrôleurs de vue complexes à l’écran.Je recommanderais plutôt de prendre un instantané de la première vue des contrôleurs de vue, puis d'en faire l'arrière-plan de la deuxième vue des contrôleurs de vue.Le contrôleur d’affichage de page serait alors un enfant du deuxième contrôleur.

Ce tutoriel pourrait vous être utile - http://www.teehanlax.com/blog/custom-uiviewcontroller-transitions/

Mieux encore, quelqu'un a tenté de répliquer l'échantillon de la session 218 sur github - https://github.com/soleares/SOLPresentingFun

Bon codage

Autres conseils

Il semble que vous souhaitiez effectuer une transition personnalisée avec un conteneur UIViewController.C'est une proposition plus délicate que les transitions classiques car vous devez fournir l'objet qui implémente UIViewControllerContextTransitioning toi-même.

Malgré toutes les méthodes requises, ce protocole n’est pas si difficile à mettre en œuvre.La plupart des méthodes vont de soi.Puisque vous souhaitez une transition interactive, vous serez confronté à des obstacles que je n'ai pas encore rencontrés.Voici quelques conseils que j’ai récemment découverts lors de la mise en œuvre de ce protocole :

  1. N'hésitez pas à définir vos propres clés pour : viewControllerForKey:.J'ai découvert que j'avais besoin d'une référence au contrôleur de vue parent dans mon objet animateur.La solution la plus propre consistait à définir une autre clé à passer dans cette méthode.Cela fonctionne très bien si l'objet qui implémente ce protocole est également le contrôleur de vue parent.

  2. Vendez votre animateur en appelant animationControllerForPresentedController:presentingController:sourceController au lieu d'instancier vous-même votre animateur.Encore une fois, cela semble être une approche plus propre puisqu’elle fonctionne dans le cadre de l’intention des protocoles.C'est la méthode qui serait autrement appelée dans le cadre de presentViewController:animated:completion:.

  3. Utiliser UIModalPresentationNone.Puisque vous parlez spécifiquement de contrôleurs de vue enfants, vous ne faites pas vraiment une présentation modale.

  4. Ajoutez les appels de confinement du contrôleur de vue, par exemple. addChildViewController: dans votre animateur.C'est ici que vous ajouterez votre nouveau contrôleur de vue à la hiérarchie des contrôleurs de vue.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top