To enable an object (such as a navigation controller) to drive a view controller transition, configure a custom class to adopt the UIView​Controller​Interactive​Transitioning protocol. An object that supports this protocol is called an interactive transition delegate.


An interactive transition delegate can respond to touch events, or to time-varying programmatic input, by speeding up, slowing down, or even reversing the progress of a view controller transition. For example, an interactive transition on a navigation controller could respond to a swipe gesture by moving a view controller onto or off of the navigation stack.

To support an interactive view controller transition, you must also provide a transition animator delegate, which is a custom object that adopts the UIView​Controller​Animated​Transitioning protocol. The transition delegate and the transition animator can, if you wish, be defined within a single custom class, but the class must adopt both protocols.

If you instead want to provide a fixed-duration animated view controller transition—one that does not support user interaction—use a transition animator delegate on its own. Refer to UIView​Controller​Animated​Transitioning.

For the methods you can call to retrieve view transition context information from within your start​Interactive​Transition(_:​) method, refer to UIView​Controller​Context​Transitioning.


Starting an Interactive Transition

func start​Interactive​Transition(UIView​Controller​Context​Transitioning)

Called when the system needs to set up the interactive portions of a view controller transition and start the animations.

Providing a Transition’s Completion Characteristics

var completion​Curve:​ UIView​Animation​Curve

Called when the system needs the animation completion curve for an interactive view controller transition.

var completion​Speed:​ CGFloat

Called when the system needs the speed at which to complete an interactive transition, after the interactive portion is finished.