<!--
{
  "availability" : [
    "iOS: -",
    "iPadOS: -",
    "macCatalyst: -",
    "tvOS: -",
    "visionOS: -"
  ],
  "documentType" : "symbol",
  "framework" : "UIKit",
  "identifier" : "/documentation/UIKit/UIViewControllerAnimatedTransitioning",
  "metadataVersion" : "0.1.0",
  "role" : "Protocol",
  "symbol" : {
    "kind" : "Protocol",
    "modules" : [
      "UIKit"
    ],
    "preciseIdentifier" : "c:objc(pl)UIViewControllerAnimatedTransitioning"
  },
  "title" : "UIViewControllerAnimatedTransitioning"
}
-->

# UIViewControllerAnimatedTransitioning

A set of methods for implementing the animations for a custom view controller transition.

```
@MainActor protocol UIViewControllerAnimatedTransitioning : NSObjectProtocol
```

## Overview

The methods in this protocol let you define an animator object, which creates the animations for transitioning a view controller on or off screen in a fixed amount of time. The animations you create using this protocol must not be interactive. To create interactive transitions, you must combine your animator object with another object that controls the timing of your animations.

In your animator object, implement the [`transitionDuration(using:)`](/documentation/UIKit/UIViewControllerAnimatedTransitioning/transitionDuration(using:)) method to specify the duration of your transition and implement the [`animateTransition(using:)`](/documentation/UIKit/UIViewControllerAnimatedTransitioning/animateTransition(using:)) method to create the animations themselves. Information about the objects involved in the transition is passed to your [`animateTransition(using:)`](/documentation/UIKit/UIViewControllerAnimatedTransitioning/animateTransition(using:)) method in the form of a context object. Use the information provided by that object to move the target view controller’s view on or off screen over the specified duration.

Create your animator object from a transitioning delegate — an object that conforms to the [`UIViewControllerTransitioningDelegate`](/documentation/UIKit/UIViewControllerTransitioningDelegate) protocol. When presenting a view controller, set the presentation style to [`UIModalPresentationStyle.custom`](/documentation/UIKit/UIModalPresentationStyle/custom) and assign your transitioning delegate to the view controller’s [`transitioningDelegate`](/documentation/UIKit/UIViewController/transitioningDelegate) property. The view controller retrieves your animator object from the transitioning delegate and uses it to perform the animations. You can provide separate animator objects for presenting and dismissing the view controller.

To add user interaction to a view controller transition, you must use an animator object together with an *interactive animator object*** **— a custom object that adopts the [`UIViewControllerInteractiveTransitioning`](/documentation/UIKit/UIViewControllerInteractiveTransitioning) protocol. For more on defining interactive transitions, see [`UIViewControllerInteractiveTransitioning`](/documentation/UIKit/UIViewControllerInteractiveTransitioning).

## Topics

### Performing a transition

[`animateTransition(using:)`](/documentation/UIKit/UIViewControllerAnimatedTransitioning/animateTransition(using:))

Tells your animator object to perform the transition animations.

[`animationEnded(_:)`](/documentation/UIKit/UIViewControllerAnimatedTransitioning/animationEnded(_:))

Tells your animator object that the transition animations have finished.

### Reporting transition duration

[`transitionDuration(using:)`](/documentation/UIKit/UIViewControllerAnimatedTransitioning/transitionDuration(using:))

Asks your animator object for the duration (in seconds) of the transition animation.

### Returning an interruptible animator

[`interruptibleAnimator(using:)`](/documentation/UIKit/UIViewControllerAnimatedTransitioning/interruptibleAnimator(using:))

Returns the interruptible animator to use during the transition.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)