UIViewControllerAnimatedTransitioning vs. benutzerdefiniertes UIStoryboardSegue

9

Benutzerdefinierte Übergänge sind ziemlich neu für mich. Ich musste sie in das letzte Projekt einarbeiten, an dem ich arbeitete, und am Ende sowohl das UIViewControllerAnimatedTransitioning -Protokoll als auch benutzerdefinierte Übergänge verwenden.

Benutzerdefinierte Segmente erscheinen ein bisschen sauberer / freundlicher, da Sie sie in einem Storyboard auswählen und damit fertig werden können. Es scheint jedoch keine so freundliche Möglichkeit zu geben, ein Back / Pop-Segment einzurichten. Ich habe über das Abwickeln von Übergängen gelesen, aber ich kann anscheinend nichts finden, wenn man einen an den hinteren Knopf eines Nav-Controllers bindet.

Der UIViewControllerAnimatedTransitioning-Protokollansatz ist etwas weiter eingerichtet, ermöglicht Ihnen jedoch, sowohl das Eingeben als auch das Beenden der Ansichten anzugeben.

Im Fall meiner App war es nicht möglich, mit meinen benutzerdefinierten Segmenten zurückzukehren, da der Fluss der App es nicht erlaubt, zu den vorherigen Ansichten zurückzukehren. Bei den meisten Anwendungen ist dies jedoch erforderlich, so dass ein benutzerdefinierter Übergang wertlos erscheint, wenn Sie nicht UINavigationController ableiten und benutzerdefinierte Popup-Segmente zulassen.

Fehle ich etwas, weil UIViewControllerAnimatedTransitioning der beste Ansatz für Animationen zwischen View-Controllern ist. Warum sollte ich jemals UIStoryboardSegue ableiten?

    
Jeremy Blaker 01.10.2014, 21:54
quelle

1 Antwort

4

Ich stimme zu, dass es im Vergleich zu anderen Arten von Übergängen an Dokumentationen zu Abwicklungssegmenten mangelt, aber nachdem Sie den Dreh raus haben, sind sie ziemlich einfach. Mein Verständnis ist, dass Segues (einschließlich Abwicklungssegmente) die Art und Weise ist, die Apple beabsichtigt, Sie zwischen View-Controllern zu wechseln. Auch wenn Sie benutzerdefinierte Segmente erstellen, sollten die regulären Abwicklungssegmente immer noch funktionieren.

In meiner eigenen Arbeit habe ich ein UIStoryboardSegue subclassiert, um eine benutzerdefinierte Animation beim Übergang zwischen Segues auszuführen. Wenn Sie beispielsweise in einer allgemein bekannten App auf die Menüschaltfläche in der Uber-App tippen, bewegt sich der Kartenansicht-Controller nach unten, und ein Tabellenansicht-Controller wird angezeigt. Wenn Sie eine Zeile in der Tabelle antippen, wird der neue Ansichts-Controller von rechts eingefügt, der Kartenansicht-Controller ist jedoch weiterhin auf dem Bildschirm sichtbar. Wenn Sie auf den Kartenansicht-Controller tippen, kehrt er an seine ursprüngliche Position zurück. Aus irgendeinem Grund glaube ich, dass Uber tatsächlich überhaupt keine Segmente implementiert hat, sondern nur View-Controller auf View-Controllern platziert, aber ich habe etwas Ähnliches in meiner eigenen App mit Custom-Segmenten implementiert. Diese Übergänge sind mit Apples Standardsegmenten schwer zu replizieren, also habe ich benutzerdefinierte verwendet.

Wenn Sie ein Abwicklungssegment an eine Zurück-Schaltfläche binden, sollten Sie die normale Abwicklung, die mit der Standard-Zurück-Schaltfläche in uinavigationcontroller einhergeht, außer Kraft setzen. Ich habe es sehr schwierig gefunden, dieses Segment anzupassen. Ich würde empfehlen, den standardmäßigen Zurück-Button, der mit uinavigationcontroller geliefert wird, zu verstecken, einen eigenen Bar-Button hinzuzufügen und diesen neuen Button an ein Abwicklungs-Segment zu binden. Ich weiß, dass das nervig ist, wenn man bedenkt, dass die Standard-Schaltfläche "Zurück" einige zusätzliche Funktionen enthält, z. B. wenn der Titel aus dem vorherigen Ansichts-Controller als Text verwendet wird, wenn der Titel kurz genug ist. Leider denke ich, dass Apple Sie wirklich davon abhalten will, den Standard-Button anzupassen und es schwierig macht, ihn zu verändern. Ich habe ausgelassen, wie man die Standardrückseite durch die Gewohnheit ersetzt, also lassen Sie mich wissen, wenn Sie Probleme haben.

Um das Abwicklungssegment zu erstellen, müssen Sie zunächst eine Methode in der Klasse (oder Elternklasse) von uiviewcontroller erstellen, von der Sie nach abwickeln (nicht aus).

%Vor%

Sie können methodName und segueName nach Belieben ändern. Gehe nun zu deinem Storyboard und gehe zu der Szene, die uiviewcontroller enthält, von der du von entwirfst. Wenn Sie jetzt von diesem uiviewcontroller (die gelbe Schaltfläche auf der linken Seite der Leiste oben auf dem Controller) zum Exit-Button (der orangen Button auf der rechten Seite desselben Balkens) ziehen, sehen Sie nun ein Popup-Menü up, das die methodName oben enthält. Klicken Sie auf diese Methode, und Ihr Abwicklungsbereich wird jetzt erstellt.

Nachdem Sie das Abwicklungssegment erstellt haben, sehen Sie es jetzt im Umriss auf der linken Seite des Storyboards. Wenn Sie auf das Segment klicken, können Sie es überprüfen und ihm einen Identifikator geben.

Nun, um es mit dem Zurück-Button zu knüpfen ...

Sehen Sie sich wieder die uiviewcontroller an, von der Sie von entfernen, wenn Sie das Ziehen von der benutzerdefinierten Zurück-Schaltfläche (nicht der Standard-Zurück-Schaltfläche) im Storyboard auf die Klasse dieses uiviewcontroller steuern. Für Sie wird eine IBAction erstellt, die an die Schaltfläche gebunden ist. Fügen Sie in dieser Methode Folgendes hinzu:

%Vor%

Dabei steht segueIdentifer für die Kennung, die Sie oben für das Abwicklungssegment angegeben haben. Wenn Sie jetzt auf die Zurück-Schaltfläche tippen, wird der Abwicklungsabschnitt ausgeführt. Sie können auch einige Animationen ausführen oder was nicht, bevor das Abwicklungssegment ausgeführt wird.

Ich habe tatsächlich einige komplizierte benutzerdefinierte Abwicklungssegmente gemacht, die sowohl die Quell- als auch die Zielansicht-Controller animieren. Wenn Sie genauer bestimmen können, wie Sie die Abwicklung aussehen möchten, kann ich versuchen, Ihnen zu helfen.

    
Josh Gafni 31.12.2014 18:36
quelle

Tags und Links