Ist es möglich, iOS 7 UIViewController-Übergänge (speziell interaktiv) mit untergeordneten Ansichtscontrollern zu verwenden?

StackOverflow https://stackoverflow.com//questions/22003967

Frage

Es gibt viele Tutorials zur Verwendung der neuen iOS 7 UIViewController-Übergangs-API und der großartigen neuen interaktiven Übergangs-API.Keines davon scheint sich jedoch auf das interaktive Hinzufügen und Entfernen untergeordneter Ansichtscontroller zu beziehen, obwohl der Apple-Mitarbeiter im WWDC 2013-Video zu benutzerdefinierten UIViewController-Übergängen zeigt, was ich mir als untergeordneten Ansichtscontroller vorstellen würde, der mit einem benutzerdefinierten Übergang präsentiert wird:

enter image description here

(Ich gehe davon aus, dass ein View-Controller scheinbar über einem anderen angezeigt wird.Ich glaube nicht, dass Sie zu einem neuen UIViewController wechseln können, während der andere dahinter sichtbar bleibt ...)

Ist es möglich, so etwas mit untergeordneten View-Controllern zu erreichen?

In meiner speziellen Situation füge ich ein hinzu UIPageViewController Bildergalerie als untergeordneten Ansichtscontroller, aber Sie können immer noch den Ansichtscontroller sehen, zu dem es hinzugefügt wurde, wenn das Bild das ist UIPageViewController nimmt nicht den gesamten Bildschirm ein.Ich habe auch die Möglichkeit hinzugefügt, ein Bild vom Bildschirm wegzuschieben (ähnlich dem Multitasking-Schließen von iOS 7), und ich würde es lieben, wenn das ein interaktiver View-Controller-Pop wäre.

Gibt es dafür Tutorials?Ist es überhaupt möglich?Wäre das besser mit presentViewController Irgendwie würde mir das erlauben, den Ansichtscontroller unten anzuzeigen?

War es hilfreich?

Lösung

Wenn Sie sich das Video noch einmal ansehen, werden Sie bei 12:15 bemerken, dass er auf den unterstützten Präsentationsstil verweist UIModalPresentationCustom.Dieser Präsentationsstil bedeutet, dass die Ansicht des View Controllers nicht aus der Ansichtshierarchie entfernt wird, sodass Sie Ihre eigenen Formulare erstellen können.In Ihrem Fall würden Sie also Folgendes tun:

//insert code where you want the presentation to begin

UIPageViewController *pageVC = [[UIPageViewController alloc] init];
pageVC.modalPresentationStyle = UIModalPresentationCustom;
id<UIViewControllerTransitioningDelegate> transitionDelegate = [self transitionDelegate];
[self presentViewController:pageVC animated:YES completion:nil];

Ihr Animationsübergangsobjekt wäre dafür verantwortlich, sicherzustellen, dass der Frame Ihres Seitenansichts-Controllers nicht im Vollbildmodus angezeigt wird.Beachten Sie jedoch die Auswirkungen der gleichzeitigen Verwaltung zweier komplexer Ansichtscontroller auf dem Bildschirm.Ich würde empfehlen, lieber einen Schnappschuss Ihrer ersten View-Controller-Ansicht zu machen und ihn dann zum Hintergrund der zweiten View-Controller-Ansicht zu machen.Der Page-View-Controller wäre dann ein untergeordnetes Element des zweiten Controllers.

Dieses Tutorial könnte für Sie hilfreich sein - http://www.teehanlax.com/blog/custom-uiviewcontroller-transitions/

Besser noch, jemand hat versucht, das Beispiel von Session 218 auf Github zu replizieren – https://github.com/soleares/SOLPresentingFun

Viel Spaß beim Codieren

Andere Tipps

Es hört sich so an, als ob Sie einen benutzerdefinierten Übergang mit einem UIViewController-Container durchführen möchten.Dies ist ein schwierigerer Vorschlag als typische Übergänge, da Sie das Objekt bereitstellen müssen, das implementiert wird UIViewControllerContextTransitioning selbst.

Trotz aller erforderlichen Methoden ist dieses Protokoll nicht so schwer zu implementieren.Die meisten Methoden sind selbstverständlich.Da Sie einen interaktiven Übergang wünschen, werden Sie auf einige Hürden stoßen, denen ich bisher noch nicht begegnet bin.Hier sind ein paar Tipps, die ich kürzlich bei der Implementierung dieses Protokolls entdeckt habe:

  1. Scheuen Sie sich nicht, Ihre eigenen Schlüssel zu definieren für: viewControllerForKey:.Ich habe festgestellt, dass ich in meinem Animatorobjekt einen Verweis auf den übergeordneten View-Controller benötige.Die sauberste Lösung bestand darin, einen weiteren Schlüssel zu definieren, der an diese Methode übergeben werden soll.Dies funktioniert sehr gut, wenn das Objekt, das dieses Protokoll implementiert, auch der übergeordnete View-Controller ist.

  2. Verkaufen Sie Ihren Animator telefonisch animationControllerForPresentedController:presentingController:sourceController anstatt Ihren Animator selbst zu instanziieren.Auch dies fühlte sich wie ein saubererer Ansatz an, da er im Rahmen der Absicht der Protokolle funktioniert.Dies ist die Methode, die andernfalls als Teil von aufgerufen würde presentViewController:animated:completion:.

  3. Verwenden UIModalPresentationNone.Da Sie speziell über untergeordnete Ansichtscontroller sprechen, führen Sie keine wirklich modale Präsentation durch.

  4. Fügen Sie die View-Controller-Containment-Aufrufe hinzu, z. addChildViewController: in Ihrem Animator.Hier fügen Sie Ihren neuen View-Controller zur View-Controller-Hierarchie hinzu.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top