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
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:
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 .
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
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.
Tags und Links ios uikit presentviewcontroller uimodalpresentationcustom