iPhone: Comment faire pour changer d'onglet avec une animation?
Je suis passer onglets par programmation dans un onglet de la barre d'application axée sur l'aide de UITabBarController.selectedIndex
. Le problème, je vais essayer de le résoudre est de savoir comment animer la transition entre les points de vue. c'est à dire. à partir de l'affichage de l'onglet en cours à la vue de l'onglet sélectionné.
La première pensée a été de faire usage de la UITabBarControllerDelegate
, mais il semble que ce n'est pas appelé lorsque par programme de commutation onglets. Je suis maintenant compte tenu de la UITabBarDelegate.didSelectItem
: comme crochet pour définir une animation de transition.
Quelqu'un a réussi à animer les transitions?
Si oui, comment ?
- FWIW, beaucoup de ces très voté réponses sont antérieurs à personnaliser les transitions décrites dans les eaux de Ruissellement de la réponse et Heberti, de trop. Ceux-ci sont la bonne façon de s'attaquer à ces animations personnalisées. Voir la WWDC 2013 vidéo Transitions Personnalisées à l'Aide de Contrôleurs de Vue.
InformationsquelleAutor drekka | 2011-03-01
Vous devez vous connecter pour publier un commentaire.
Mise à jour 04/2016: Justed voulais mettre à jour ce à dire merci à tout le monde pour tous les suffrages. Veuillez également noter que cela a été écrit à l'origine le chemin du retour lorsque ... avant d'ARC, avant de contraintes, avant de ... beaucoup de choses! Merci donc de prendre en compte au moment de décider si l'utilisation de ces techniques. Il peut y avoir des approches plus modernes. Oh, et si vous en trouver un. S'il vous plaît ajouter une réponse, de sorte que tout le monde peut voir. Merci.
Quelques temps plus tard ...
Après beaucoup de recherches, j'ai trouvé deux solutions de travail. Ces deux travaillé et fait de l'animation entre les onglets.
Solution 1: passage de la vue (simple)
C'est le plus facile et permet l'utilisation d'un prédéfini UIView méthode de transition. Avec cette solution, nous n'avez pas besoin de gérer les points de vue parce que la méthode fait le travail pour nous.
Solution 2: faire défiler (plus complexe)
Plus en plus complexes, la solution, mais vous donne plus de contrôle de l'animation. Dans cet exemple, nous obtenons le point de vue de glisser sur et en dehors. Avec ce dont nous avons besoin pour gérer la vue de nous-mêmes.
Cette Solution Swift:
shouldSelectViewController
méthode et retour PAS làshouldSelectViewController
est le point de vue de la "nouvelle" Onglet.. l'indice de la "nouvelle" de l'onglet ne peut pas être le même que letabBarController.selectedIndex
.controllerIndex
? Si vous avez plusieurs contrôleurs de vue dans la barre d'onglet contrôleur, puis unUIMoreNavigationController
apparaîtra. SoncontrollerIndex
est toujours lié. Puisque c'est une classe privée, nous ne pouvons pas le vérifier à l'aide de[viewController isKindOfClass:]
, nous avons donc à consulter l'index:if (controllerIndex > tabBarController.viewControllers.count - 1) {...}
if (controllerIndex == tabBarController.selectedIndex) { return YES; }
qui suit est mon essayez d'utiliser la forme de code drekka dans la délégué(UITabBarControllerDelegate) méthode
Ma solution pour iOS7.0 ou au-dessus.
Vous pouvez spécifier un contrôleur d'animation personnalisé dans l'onglet de la barre de son délégué.
De mettre en œuvre un contrôleur d'animation comme ceci:
Ensuite l'utiliser dans votre UITabBarControllerDelegate:
Au lieu d'utiliser
tabBarController:shouldSelectViewController:
est préférable de mettre en œuvretabBarController:animationControllerForTransitionFromViewController:toViewController:
TransitioningObject.swift
TabBarViewController.swift
Je pense que vous pouvez facilement réaliser des transitions pour UITabBarControlelr à l'aide de CATransition; Cela permettra également de résoudre les éventuels effets secondaires de l'utilisation transitionFromView:toView:
Utiliser cette l'intérieur de votre personnalisé TabBarController classe étendue de UITabBarController.
Espère que cela aide 🙂
J'ai écrit un post après avoir essayé les différentes réponses ici.
Le code est rapide, et vous pouvez les modifier par programmation l'onglet animation en appelant
animateToTab
.Si vous voulez que tous les onglet modifier pour avoir l'animation, puis l'accrocher à
UITabBarControllerDelegate
comme tels:Ma solution Swift:
Créer des TabBar classe et de le fixer dans votre storyboard TabBar
finished
sera false). Je ne sais pas pourquoi cela arrive, mais je pense que cela a à voir avec CA de transformation, qui pense qu'il y a "rien d'animation". Je suis passé à l'animation avec des images, et ça a fonctionné.J'ai utilisé @Mofumofu de la solution et mis à niveau à Swift 1.2 et aussi mis en place un haut /bas de l'animation.
Sens, la nouvelle ViewController se lève et pousse l'ancien si le nouveau viewcontroller de l'indice est supérieur à l'ancien de. Sinon, la direction est vers le bas.
Dans le Conteneur ViewController:
Voici ma Swift 3 solution:
Je remplace selectedIndex de mon UITabBarViewController comme ceci:
Puis-je utiliser cette fonction qui imite natif push/pop animation:
J'espère que cela aide 🙂
un correctif pour les problèmes de l'animation...
UIView * fromView = self.view.superview;
cela peut être résolu de deux manières
1 - Écrire ceci dans votre AppDelegate.m fichier une fois. N'oubliez pas d'inclure UITabBarControllerDelegate à l'aide de <> après les deux-points (:) dans votre AppDelegate.h
2 - Écrire cela dans chacun de vos ViewController.m fichier
espérons que cette aide...!
Vous pouvez animer en fonction de la taraudés de l'Élément Dans cet exemple, nous flipFromLeft si le taraudé index > que le précédent indice choisi et nous flipFromRight si le taraudé index < que le précédent index sélectionné. C'est Swift 4: mettre en Œuvre le UITabBarControllerDelegate méthode
drekka réponse est vraiment génial. J'ai modifié le défilement de transition un peu pour l'animation ressemblait plus à Apple push animation. J'ai ajouté une animation lors de l'achèvement de la première animation pour obtenir que l'effet de glissement de regarder à droite.
Je voulais utiliser un flip de transition entre deux enfants de vue des contrôleurs sur un bouton de la presse et réalisé comme suit:
J'ai également régler la couleur de fond noir, dans mon cas, je l'ai fait par le réglage de la navigationController.vue.backgroundColor, mais dans votre cas, il pourrait être la fenêtre.backgroundColor qui peut facilement être configuré dans l'application délégué.
Voici mon code de travail (pour les 3 onglets, n'ai pas essayé sur plus!!) pour animer les transitions entre les onglets. Il est principalement basé sur drekka de la solution, mais déjà mis en œuvre dans la tabbar délégué de la méthode, de sorte qu'il devrait faire le travail si vous il suffit de copier/coller.. (on ne sait jamais!)
}
Cela fonctionne pour moi en Swift 3:
@samwize Réponse traduit de Swift 3- 2 pouces sur celui-ci, crée une gauche à wright effet page:
Swift 4+
Vous
UITabBarControllerDelegate
méthode devrait être comme cela,Et la méthode est,