<!--
{
  "availability" : [
    "iOS: -",
    "iPadOS: -",
    "visionOS: 2.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "AVKit",
  "identifier" : "/documentation/AVKit/AVExperienceController",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "AVKit"
    ],
    "preciseIdentifier" : "s:5AVKit22AVExperienceControllerC"
  },
  "title" : "AVExperienceController"
}
-->

# AVExperienceController

An object that controls video experiences.

```
@MainActor final class AVExperienceController
```

## Overview

Use this class to control, observe, and respond to experience changes for an [`AVPlayerViewController`](/documentation/AVKit/AVPlayerViewController). After you attach an experience controller, the player view controller no longer honors its presentation APIs. Using the other presentation APIs may preclude the use of this class.

## Topics

### Configuring the experience

[`var allowedExperiences: AVExperienceController.Experiences`](/documentation/AVKit/AVExperienceController/allowedExperiences)

The set of experiences the app supports.

[`var availableExperiences: AVExperienceController.Experiences`](/documentation/AVKit/AVExperienceController/availableExperiences)

The allowed experiences that are available to use on the device at this time.

[`struct Experiences`](/documentation/AVKit/AVExperienceController/Experiences)

A structure that represents a collection of experiences to use with an experience controller.

[`var experience: AVExperienceController.Experience`](/documentation/AVKit/AVExperienceController/experience-swift.property)

The current experience.

[`enum Experience`](/documentation/AVKit/AVExperienceController/Experience-swift.enum)

The types of experiences the system supports.

[`var configuration: AVExperienceController.Configuration`](/documentation/AVKit/AVExperienceController/configuration-swift.property)

The configuration options per experience.

[`struct Configuration`](/documentation/AVKit/AVExperienceController/Configuration-swift.struct)

Options that configure each experience.

### Transitioning experiences

[`struct TransitionGroup`](/documentation/AVKit/AVExperienceController/TransitionGroup)

A group of experience transitions that prepare concurrently and
run simultaneously as a single visual transition.

[`static func withTransitionGroup<ChildTransitionResult>(body: (inout AVExperienceController.TransitionGroup<ChildTransitionResult>) async -> Void) async -> [ChildTransitionResult]`](/documentation/AVKit/AVExperienceController/withTransitionGroup(body:))

Coordinates multiple experience transitions to perform together as a single visual transition.

[`func transition(to: AVExperienceController.Experience) async -> AVExperienceController.TransitionContext.TransitionResult`](/documentation/AVKit/AVExperienceController/transition(to:))

Transitions the video to a different experience.

### Configuring a delegate

[`var delegate: (any AVExperienceController.Delegate)?`](/documentation/AVKit/AVExperienceController/delegate-swift.property)

A delegate object for the experience controller.

[`protocol Delegate`](/documentation/AVKit/AVExperienceController/Delegate-swift.protocol)

A protocol that defines the methods to implement to respond to experience changes.

### Structures

[`struct ExpandedConfiguration`](/documentation/AVKit/AVExperienceController/ExpandedConfiguration)

A structure that specifies options for an expanded experience.

[`struct TransitionContext`](/documentation/AVKit/AVExperienceController/TransitionContext)

The state of the transition that the system provides to the delegate object.

## Relationships

### Conforms To

[`Sendable`](/documentation/Swift/Sendable)

[`SendableMetatype`](/documentation/Swift/SendableMetatype)

---

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)