Je change d'onglet par programmation dans une application pilotée par la barre d'onglets en utilisant UITabBarController.selectedIndex
. Le problème que j'essaie de résoudre est de savoir comment animer la transition entre les vues. c'est à dire. de la vue de l'onglet courant à la vue de l'onglet sélectionné.
La première pensée a été d'utiliser le UITabBarControllerDelegate
, mais il semble que cela ne soit pas appelé lors du changement d'onglet par programme. Je considère maintenant le UITabBarDelegate.didSelectItem
: comme un crochet possible pour définir une animation de transition.
Quelqu'un a-t-il réussi à animer les transitions? Si oui, comment?
ios4
uitabbarcontroller
uitabbar
Drekka
la source
la source
Réponses:
Mise à jour 04/2016: Justed voulait mettre à jour ceci pour dire merci à tous pour tous les votes. Veuillez également noter que cela a été écrit à l'origine quand ... avant ARC, avant les contraintes, avant ... beaucoup de choses! Veuillez donc en tenir compte lorsque vous décidez d'utiliser ces techniques. Il existe peut-être des approches plus modernes. Oh, et si vous en trouvez un. Veuillez ajouter une réponse pour que tout le monde puisse la voir. Merci.
Un peu plus tard ...
Après de nombreuses recherches, j'ai proposé deux solutions fonctionnelles. Les deux ont fonctionné et ont fait l'animation entre les onglets.
Solution 1: transition de la vue (simple)
C'est le plus simple et utilise une méthode de transition UIView prédéfinie. Avec cette solution, nous n'avons pas besoin de gérer les vues car la méthode fait le travail pour nous.
Solution 2: faire défiler (plus complexe)
Une solution plus complexe, mais qui vous donne plus de contrôle sur l'animation. Dans cet exemple, nous faisons glisser les vues sur et en dehors. Avec celui-ci, nous devons gérer nous-mêmes les vues.
Cette solution dans Swift:
la source
shouldSelectViewController
et y renvoie NONVoici mon essai d'utiliser la forme de code drekka dans la méthode du délégué (UITabBarControllerDelegate)
la source
Ma solution pour iOS7.0 ou supérieur.
Vous pouvez spécifier un contrôleur d'animation personnalisé dans le délégué de la barre d'onglets.
Implémentez un contrôleur d'animation comme celui-ci:
Ensuite, utilisez-le dans votre UITabBarControllerDelegate:
la source
Au lieu d'utiliser, il
tabBarController:shouldSelectViewController:
vaut mieux mettre en œuvretabBarController:animationControllerForTransitionFromViewController:toViewController:
TransitioningObject.swift
TabBarViewController.swift
la source
Je pense que vous pouvez facilement réaliser des transitions pour UITabBarControlelr en utilisant CATransition; Cela résoudra également tous les effets secondaires de l'utilisation de transitionFromView: toView:
Utilisez ceci dans votre classe TabBarController personnalisée étendue de UITabBarController.
J'espère que cela t'aides :)
la source
J'ai écrit un article après avoir essayé les différentes réponses ici.
Le code est en Swift et vous pouvez modifier par programme l'onglet avec animation en appelant
animateToTab
.Si vous voulez que tous les changements d'onglets aient l'animation, accrochez-la
UITabBarControllerDelegate
comme telle:la source
Ma solution dans Swift:
Créez une classe TabBar personnalisée et définissez-la dans votre storyboard TabBar
la source
finished
sera faux). Je ne sais pas pourquoi cela se produit, mais je pense que cela a à voir avec la transformation CA qui pense qu'il n'y a "rien à animer". Je suis passé à l'animation avec des cadres, et cela a fonctionné.J'ai utilisé la solution de @ Mofumofu et l'ai mise à niveau vers Swift 1.2 et également implémenté une animation haut / bas. Cela signifie que le nouveau ViewController apparaît et pousse l'ancien vers le haut si l'index du nouveau ViewController est supérieur à l'ancien. Sinon, la direction est vers le bas.
Dans le conteneur ViewController:
la source
Voici ma solution Swift 3:
Je remplace selectedIndex de mon UITabBarViewController comme ceci:
Ensuite, j'utilise cette fonction qui imite l'animation native push / pop:
J'espère que cela aide :)
la source
un correctif pour l'animation nerveuse ...
UIView * fromView = self.view.superview;
la source
cela peut être résolu de deux manières
1 - Écrivez ceci une fois dans votre fichier AppDelegate.m. N'oubliez pas d'inclure UITabBarControllerDelegate en utilisant <> après deux points (:) dans votre AppDelegate.h
2 - Écrivez ceci dans chacun de vos fichiers ViewController.m
espérons cette aide ...!
la source
Vous pouvez animer en fonction de l'élément tapé - Dans cet exemple, nous flipFromLeft si l'index tapé est> que l'index sélectionné précédent et nous flipFromRight si l'index tapé est <que l'index sélectionné précédent. Voici Swift 4: implémentez la méthode UITabBarControllerDelegate
la source
La réponse de drekka est vraiment géniale. J'ai légèrement modifié la transition de défilement pour que l'animation ressemble plus à l'animation push d'Apple. J'ai ajouté une animation supplémentaire à la fin de la première animation pour que l'effet de glissement soit parfait.
la source
Je voulais utiliser une transition inversée entre deux contrôleurs de vue enfants en appuyant sur un bouton et je l'ai réalisé comme suit:
J'ai également défini la couleur d'arrière-plan sur noir, dans mon cas, je l'ai fait en définissant navigationController.view.backgroundColor, mais dans votre cas, cela pourrait être le window.backgroundColor qui peut facilement être défini dans le délégué d'application.
la source
Voici mon code de travail ( pour 3 onglets , je ne l'ai pas essayé plus !!) pour animer les transitions entre les onglets. Il est principalement basé sur la solution de drekka, mais déjà implémenté dans la méthode déléguée de la barre d'onglets, il devrait donc faire le travail si vous le copiez / collez simplement ... (on ne sait jamais!)
}
la source
Cela fonctionne pour moi dans Swift 3:
la source
@samwize Réponse traduite en Swift 3 - 2 pouces vers le haut sur celui-ci, crée un effet de page de gauche à droite:
la source
Réponse de @ samwize mise à jour pour Swift 5:
Si vous souhaitez que toutes les modifications d'onglet aient une animation, utilisez un UITabBarControllerDelegate et implémentez cette méthode:
Changez par programme l'onglet avec animation en appelant
animateToTab
:la source
Swift 4+
Votre
UITabBarControllerDelegate
méthode devrait être comme ça,Et la méthode est,
la source