Benutzerdefinierter interaktiver Präsentationsübergang

8

Ich versuche, einen benutzerdefinierten Ansichts-Controller-Container zu erstellen, der am unteren Bildschirmrand eine Schublade wie die Apple Mail- oder Musik-Apps anzeigt, und ich möchte, dass der Benutzer darauf tippen kann, um ihn zu wechseln auf Vollbild oder schieben Sie es interaktiv nach oben, um den Inhalt anzuzeigen.

Ich habe die Schublade in Betrieb und benutze UIPanGestureRecognizer , um sie zu verschieben. Ich kann dies implementieren, indem ich den Content-Controller als Child-Controller hinzufüge, die Inhaltsansicht der Hierarchie und bei Bedarf viewWillAppear: und viewDidAppear: aufrufen.

Ich möchte aber zulassen, dass der Inhaltsansicht-Controller neben dem Swipe animiert wird (zB Animationen in viewWillAppear: , wie bei interaktivem Pop), also schaue ich mir eine benutzerdefinierte modale Präsentation und UIPercentDrivenInteractiveTransition an, aber ich treffe ein Wand, und ich kann nicht sehen, warum das passiert. Ich habe einen Transitionsdelegaten eingerichtet, der einen benutzerdefinierten Animationscontroller und einen Interaktionscontroller zurückgibt, der ein UIPercentDrivenInteractiveTransition -Objekt ist.

Meine Schublade ist Teil der Ansichtshierarchie des Container-Controllers, und natürlich möchte ich, dass die Ansicht des Content-Controllers eine Unteransicht der Schublade ist. Beim Aufruf von presentViewController:animated:completion: wird jedoch eine neue UITransitionView -Untersicht zu UIWindow hinzugefügt, wo vermutlich die Übergangsanimation stattfinden soll. Aber das bringt meine UIPanGestureRecognizer zum Erliegen, und der Benutzer kann den Swipe nicht ausführen, um die Schublade zu öffnen.

Ich habe versucht, eine benutzerdefinierte UIPresentationController und andere Möglichkeiten zu erstellen, um zu steuern, wo in der Hierarchie dieser containerView sein sollte, aber ich kann das Verhalten nicht ändern.

Was versuche ich, den richtigen Weg zu gehen? Was habe ich verpasst?

Wenn jemand interessiert ist, hier ist mein Rahmen: LNPopupController

    
Leo Natan 18.07.2015, 21:34
quelle

2 Antworten

4
Update 2015.11.19

Ein Demo-Projekt sowie Ссылка

Danke @avdyushin hat meinen Blogeintrag erwähnt.

Und ja, mein Beitrag Draggable View Controller? Interactive View Controller! ist ein Tutorial über Ihr Thema.

Zitat aus meinem Blogpost:

Wie man es macht

Design-Philosophie

Es gibt keine zwei UIViewController zusammen, stattdessen gibt es nur ein UIViewController gleichzeitig. Wenn der Benutzer beginnt, auf eine bestimmte Unteransicht zu ziehen, können Sie einen anderen View-Controller mit benutzerdefiniertem UIViewControllerAnimatedTransitioning präsentieren UIPercentDrivenInteractiveTransition-Protokoll .

Technische Dinge

Diese beiden Protokolle sind die Grundlage für die Anpassung interaktiver UIViewController -Übergänge. Falls Sie es noch nicht wissen, werfen Sie einen Blick auf den Anfang.
1. UIViewControllerAnimatedTransitioning-Protokoll
2. UIPercentDrivenInteractiveTransition-Protokoll

    
saiday 26.10.2015, 14:25
quelle
3

Eine aktualisierte Antwort für iOS 10: Dies ist jetzt trivial mit UIViewPropertyAnimator .

UIViewPropertyAnimator ist eine Fortsetzung des Block-basierten Animationskonzepts, in seiner logischen Fortsetzung - ein objektorientierter Wrapper um Animationen. Dies ermöglicht viel mehr Kontrolle, z. B. Kontrolle der Fertigstellung der Animation mit fractionComplete - genau was hier benötigt wurde.

    
Leo Natan 28.12.2016 16:03
quelle