Ich wechsle Tabs programmgesteuert in einer tabulatorgesteuerten Anwendung mit UITabBarController.selectedIndex
. Das Problem, das ich zu lösen versuche, ist, wie der Übergang zwischen den Ansichten animiert werden kann. dh. von der Ansicht der aktuellen Registerkarte zur Ansicht der ausgewählten Registerkarte.
Der erste Gedanke war, das zu nutzen UITabBarControllerDelegate
, aber es scheint, dass dies beim programmgesteuerten Wechseln der Registerkarten nicht aufgerufen wird. Ich betrachte jetzt das UITabBarDelegate.didSelectItem
: als möglichen Haken, um eine Übergangsanimation festzulegen.
Hat es jemand geschafft, die Übergänge zu animieren? Wenn ja, wie?
ios4
uitabbarcontroller
uitabbar
drekka
quelle
quelle
Antworten:
Update 04/2016: Justed wollte dies aktualisieren, um sich bei allen für alle Stimmen zu bedanken. Bitte beachten Sie auch, dass dies ursprünglich vor langer Zeit geschrieben wurde, als ... vor ARC, vor Einschränkungen, vor ... vielen Dingen! Bitte berücksichtigen Sie dies, wenn Sie entscheiden, ob Sie diese Techniken verwenden möchten. Es kann modernere Ansätze geben. Oh, und wenn Sie einen finden. Bitte fügen Sie eine Antwort hinzu, damit jeder sehen kann. Vielen Dank.
Etwas später ...
Nach langem Suchen habe ich zwei funktionierende Lösungen gefunden. Beide funktionierten und führten die Animation zwischen den Registerkarten durch.
Lösung 1: Übergang von der Ansicht (einfach)
Dies ist die einfachste und verwendet eine vordefinierte UIView-Übergangsmethode. Mit dieser Lösung müssen wir die Ansichten nicht verwalten, da die Methode die Arbeit für uns erledigt.
Lösung 2: Scrollen (komplexer)
Eine komplexere Lösung, mit der Sie die Animation besser steuern können. In diesem Beispiel werden die Ansichten ein- und ausgeschaltet. Mit diesem müssen wir die Ansichten selbst verwalten.
Diese Lösung in Swift:
quelle
shouldSelectViewController
Methode des TabBar-Delegierten und gab dort NEIN zurückIm Folgenden ist mein Versuch aufgeführt, das Codeformular drekka in der Methode delegate (UITabBarControllerDelegate) zu verwenden
quelle
Meine Lösung für iOS7.0 oder höher.
Sie können einen benutzerdefinierten Animationscontroller im Delegaten der Registerkartenleiste angeben.
Implementieren Sie einen Animationscontroller wie folgt:
Verwenden Sie es dann in Ihrem UITabBarControllerDelegate:
quelle
Anstatt zu verwenden
tabBarController:shouldSelectViewController:
ist besser zu implementierentabBarController:animationControllerForTransitionFromViewController:toViewController:
TransitioningObject.swift
TabBarViewController.swift
quelle
Ich denke, Sie können mit CATransition problemlos Übergänge für UITabBarControlelr erzielen. Dadurch werden auch alle Nebenwirkungen der Verwendung von TransitionFromView: toView: behoben.
Verwenden Sie dies in Ihrer benutzerdefinierten TabBarController-Klasse, die von UITabBarController erweitert wurde.
Hoffe das hilft :)
quelle
Ich habe einen Beitrag geschrieben nachdem die verschiedenen Antworten hier ausprobiert hatte.
Der Code ist in Swift und Sie können die Registerkarte mit Animation programmgesteuert ändern, indem Sie aufrufen
animateToTab
.Wenn Sie möchten, dass alle Registerkartenänderungen die Animation enthalten, haken Sie sie
UITabBarControllerDelegate
so ein:quelle
Meine Lösung in Swift:
Erstellen Sie eine benutzerdefinierte TabBar-Klasse und legen Sie sie in Ihrer Storyboard-TabBar fest
quelle
finished
falsch sein wird). Ich weiß nicht, warum das passiert, aber ich denke, es hat mit der CA-Transformation zu tun, die denkt, es gibt "nichts zu animieren". Ich wechselte zur Animation mit Frames, und das funktionierte.Ich habe die Lösung von @ Mofumofu verwendet und auf Swift 1.2 aktualisiert und auch eine Auf- / Ab-Animation implementiert. Das heißt, der neue ViewController wird angezeigt und schiebt den alten nach oben, wenn der Index des neuen Viewcontrollers größer als der des alten ist. Ansonsten ist die Richtung unten.
Im Container ViewController:
quelle
Hier ist meine Swift 3-Lösung:
Ich überschreibe selectedIndex meines UITabBarViewControllers wie folgt:
Dann benutze ich diese Funktion, die native Push / Pop-Animationen nachahmt:
Ich hoffe, es hilft :)
quelle
ein Fix für die nervöse Animation ...
UIView * fromView = self.view.superview;
quelle
Dies kann auf zwei Arten gelöst werden
1 - Schreiben Sie dies einmal in Ihre AppDelegate.m-Datei. Denken Sie daran, UITabBarControllerDelegate mit <> nach Doppelpunkt (:) in Ihre AppDelegate.h aufzunehmen
2 - Schreiben Sie dies in jede Ihrer ViewController.m-Dateien
Ich hoffe das hilft...!
quelle
Sie können abhängig vom angezapften Element animieren. In diesem Beispiel wird FlipFromLeft verwendet, wenn der angezapfte Index> als der zuvor ausgewählte Index ist, und FlipFromRight, wenn der angezapfte Index <als der zuvor ausgewählte Index ist. Dies ist Swift 4: Implementieren Sie die UITabBarControllerDelegate-Methode
quelle
Drekkas Antwort ist wirklich großartig. Ich habe den Bildlaufübergang ein wenig angepasst, damit die Animation eher wie die Push-Animation von Apple aussieht. Nach Abschluss der ersten Animation habe ich eine zusätzliche Animation hinzugefügt, damit dieser Gleiteffekt richtig aussieht.
quelle
Ich wollte einen Flip-Übergang zwischen zwei untergeordneten Ansichts-Controllern auf Knopfdruck verwenden und habe ihn wie folgt erreicht:
Ich habe auch die Hintergrundfarbe auf Schwarz gesetzt. In meinem Fall habe ich dazu die Datei navigationController.view.backgroundColor festgelegt. In Ihrem Fall kann es sich jedoch um die window.backgroundColor handeln, die einfach im App-Delegaten festgelegt werden kann.
quelle
Hier ist mein Arbeitscode ( für 3 Registerkarten , habe ihn nicht mehr ausprobiert !!), um Übergänge zwischen Registerkarten zu animieren. Es basiert hauptsächlich auf der Lösung von drekka, ist jedoch bereits in der Delegatenmethode der Registerkarte implementiert. Daher sollte es den Job erledigen, wenn Sie es nur kopieren / einfügen. (Sie wissen es nie!)
}}
quelle
Das funktioniert bei mir in Swift 3:
quelle
@samwize Antwort übersetzt in Swift 3 - 2 Daumen hoch auf diesem, erzeugt einen von links nach rechts gerichteten Seiteneffekt:
quelle
@ samwizes Antwort für Swift 5 aktualisiert:
Wenn alle Registerkartenänderungen animiert werden sollen, verwenden Sie ein UITabBarControllerDelegate und implementieren Sie diese Methode:
Ändern Sie die Registerkarte mit der Animation programmgesteuert, indem Sie Folgendes aufrufen
animateToTab
:quelle
Swift 4+
Ihre
UITabBarControllerDelegate
Methode sollte so sein,Und die Methode ist,
quelle