2014-04-04 11 views
10

Wenn Sie den gesteuerten UIPercentDrivenInteractiveTransition mit CABasicAnimation (oder einer anderen CAAnimation) verwenden, springt die Animation bei finishInteractiveTransition zur endgültigen Position und animiert nicht wie bei der UIView-Blockanimation. Ich versuche herauszufinden, wie man nach dem Beenden von InteractiveTransition reibungslos animiert, um mit CAAnimation zu beenden.UIPercentDrivenInteractiveTransition mit CABasicAnimation

Ich habe jetzt den ganzen Tag darauf verbracht. Es scheint nirgends zu erwähnen, CAAnimation mit benutzerdefinierten VC-Übergängen zu verwenden, alle beziehen sich auf UIView-Block-basierte Animationen.

Ich habe ein kleines Beispielprojekt erstellen, das Problem zeigt.

https://github.com/stringcode86/UIPercentDrivenInteractiveTransitionWithCABasicAnimation

Vielen Dank an alle, die Zeit es zu betrachten verbringt. Ich schätze es.

+1

Überprüfen Sie das Repo. Dateien fehlen. Projekt wird nicht kompiliert. – RaffAl

+0

Vielen Dank, dass Sie sich die Zeit genommen haben. Ich habe das Repo repariert, sollte jetzt gut sein – stringCode

+0

Gibt es eine bessere Lösung für dieses Problem? Eine ohne "UIPercentDrivenInteractiveTransition" zu untergliedern oder einen eigenen "UIViewControllerInteractiveTransitioning" zu erstellen. –

Antwort

10

SOLUTION

Wie Lösung stellt sich heraus, ist Schichten Zeit beginnen zu manipulieren. Ich werde versuchen, die Lösung unten etwas ausführlicher zu erklären. Es gibt zwei Lösungen, die UIPercentDrivenTransition Unterklasse verwenden oder UIViewControllerInteractiveTransitioning Protokoll implementieren. Benutzerdefinierter UIViewControllerInteractiveTransitioning befindet sich im Master-Zweig und die UIPercentDrivenTransition-Implementierung befindet sich im Zweig UIPercentDrivenTransitionImplementation.

https://github.com/stringcode86/UIPercentDrivenInteractiveTransitionWithCABasicAnimation

ERKLÄRUNG

UIPercentDrivenTransition verwendet Animationen in animateTransition: updateInteractiveTransition: zu implementieren. Ich nehme an, sie rufen einfach animateTransition: von startInteractiveTransition: und legen Sie dann Ebene (vielleicht Container Sicht Layer) Geschwindigkeit auf 0.0 und manipulieren Sie timeOffSet. Dadurch können sie Ihren Übergang automatisch vor- und zurückstellen. Dies geschieht für Ihre UIView-Animationen. Problem mit CAAnimations ist ihre begingTime, timeOffSet, speed Eigenschaften sind aus irgendeinem Grund nicht richtig eingestellt. Wenn Sie diese auf sinnvolle Werte setzen, können Sie alle animierten Inhalte in containerView hin und her verschieben. Ich habe erstellt SCPercentDrivenTransition Hexe ist alternativ zu UIPercentDrivenTransition. Sie müssen animateTransition nur überschreiben und handleGesture aufrufen: aus Ihren Gestenerkennungs-Aktionsaufrufen.

+0

was für eine großartige Erklärung. Vielen Dank – andrei

+1

Ich denke, Sie könnten die einzige Person auf der Welt sein, die UIViewControllerInteractiveTransitioning implementiert und demonstriert, wie Sie es außerhalb des standardmäßigen prozentualen Übergangs verwenden können. So segne dich! – hao

Verwandte Themen