benutzerdefinierte interaktive transition animation
Ich soll die Umsetzung einer interaktiven überblendung zwischen zwei view-Controllern. Ich möchte, dass es ein modales oder präsentieren übergang.
- Ich will, die app zu starten, auf den ersten Blick-controller und ermöglichen dem Benutzer, streichen Sie nach unten zu bringen, in der zweiten view-controller
- Die zweite view-controller kommen sollte und das cover der aktuellen (ersten view-controller), anstatt es aus dem Weg
Ich verstehe, dass ich brauchen würde, verwenden Sie die folgende.
transitioningDelegate
animationController(forPresented:Vorlage:Quelle:)
interactionControllerForPresentation(Mit:)
UIPercentDrivenInteractiveTransition
Ich habe ein Problem, herauszufinden, wie die Umsetzung all dieser. Ich kann nicht scheinen, etwas zu finden, nützlich oder jede funktionierende Beispiele in swift 3. Jetzt habe ich eine einfache single-view-Anwendung mit zwei view-Controller VC1 (blauer hintergrund) und VC2 (gelber hintergrund), um einfach testen mögliche Lösungen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehen WWDC 2013 video Benutzerdefinierte Übergänge Mit View-Controllern für die Diskussion der übergang zu delegieren, animation, Steuerung und Interaktion-controller. Siehe WWDC 2014 videos View-Controller Fortschritte in iOS 8 und Ein Blick In Die Präsentation-Controller für die Einführung in die Präsentation Controller (das sollte man auch verwenden).
Die grundlegende Idee ist, erstellen Sie eine transition delegate-Objekt, das identifiziert, was animation, Steuerung, Interaktion, Steuerung und Präsentation-controller wird verwendet für die benutzerdefinierte übergang:
Du musst dann einfach angeben, dass eine custom-übergang benutzt wird und was den übergang zu delegieren, sollten verwendet werden. Sie können tun, dass beim instanziieren der Ziel-view-controller, oder Sie können festlegen, dass als Teil des
init
für die Ziel-view-controller, wie zum Beispiel:Die Animations-controller gibt die details der animation (wie zum animieren, Dauer verwendet werden für nicht-interaktive übergänge, etc.):
Den obigen animation-controller verarbeitet sowohl zu präsentieren und zu entlassen, aber wenn das dir zu kompliziert ist, Sie theoretisch könnte es aufgeteilt in zwei Klassen, eine für die Präsentation und eine für die Entlassung. Aber ich mag nicht zwei verschiedene Klassen so eng gekoppelt, so werde ich die Kosten tragen, die geringe Komplexität von
animateTransition
um sicherzustellen, dass es ist alles schön gekapselt in einer Klasse.Jedenfalls, das nächste Objekt, das wir wollen, ist die Präsentation-controller. In diesem Fall, die Präsentation controller uns sagt, zu entfernen, die Ursprungs-view-controller ' s view aus der view-Hierarchie. (Wir tun dies, da in diesem Fall die Szene, die Sie gerade den übergang zu passiert, besetzen den gesamten Bildschirm, so gibt es keine Notwendigkeit zu halten die alte Ansicht in den view-Hierarchie.) Wenn Sie das hinzufügen jede andere zusätzliche Chrom (z.B. hinzufügen von DIMM - /Unschärfe-Ansichten, etc.), das würde gehören, in die Präsentation-controller.
Na ja, in diesem Fall die Präsentation, die Steuerung ist ganz einfach:
Schließlich werden Sie vermutlich wollen, eine Geste-Erkennung,:
UIPercentDrivenInteractiveTransition
;UIPercentDrivenInteractiveTransition
als Geste fortschreitet;UIPercentDrivenInteractiveTransition
wenn es fertig ist (um sicherzustellen, dass es nicht über veraltete, so dass es nicht stören, alle nicht-interaktive übergänge, die Sie wünschen konnte zu tun, später ... ist dies eine subtile kleinen Punkt, der leicht übersehen werden).Also die "Darstellung" Ansicht-controller haben könnte, eine Geste-Erkennung, vielleicht irgendwas wie:
Würden Sie wahrscheinlich auch wollen, um dies zu ändern, so dass es erkennt nur nach unten-gesten (eher als jede alte Pfanne), aber ich hoffe das verdeutlicht die Idee.
Ist und Sie vermutlich wollen, dass die "vorgestellt" - view-controller, um eine gestik-Erkennung für Abweisung der Szene:
Sehen https://github.com/robertmryan/SwiftCustomTransitions für eine demonstration der obige code.
Sieht es so aus:
Aber, unterm Strich, benutzerdefinierte übergänge sind ein wenig kompliziert, so dass ich wieder verweisen Sie auf die original-videos. Stellen Sie sicher, Sie sehen Sie in einigen Details vor der Buchung Fragen. Die meisten Fragen werden wahrscheinlich beantwortet werden in diesen videos.