<!--
{
  "availability" : [
    "iOS: 13.0.0 -",
    "iPadOS: 13.0.0 -",
    "visionOS: 1.0.0 - 1.0.0"
  ],
  "documentType" : "symbol",
  "framework" : "ARKit",
  "identifier" : "/documentation/ARKit/ARCoachingOverlayView",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "ARKit"
    ],
    "preciseIdentifier" : "c:objc(cs)ARCoachingOverlayView"
  },
  "title" : "ARCoachingOverlayView"
}
-->

# ARCoachingOverlayView

A view that displays standardized onboarding instructions to direct users toward a specific goal.

```
class ARCoachingOverlayView
```

## Overview

This view offers your users a standardized onboarding routine. You can configure this view to automatically display during session initialization and in limited tracking situations, while giving the user specific instructions that best facilitate ARKit’s world tracking.

These illustrations show overlay views with horizontal- and vertical-plane goals, indicating that the user should begin moving the device:

![Illustration showing two overlay views. The view at the left shows a horizontal plane, and the view at the right shows a vertical plane. Both views indicate that the user should begin moving the device.](images/com.apple.arkit/media-3403212@2x.png)

These illustrations show overlay views indicating that the user should continue moving the phone or change the speed with which they move it:

![Illustration showing two overlay views. The view at the left indicates that the device is moving and the user should continue moving it. The view at the right indicates that the device is moving too fast and the user should move it more slowly.](images/com.apple.arkit/media-3403211@2x.png)

When you start your app, the coaching overlay asks the user to move the device in ways that help ARKit establish tracking. When you choose a specific goal like finding a plane, the view tailors its instructions accordingly. After the coaching overlay determines the goal has been met and no further coaching is required, it hides from the user’s view.

For an example app that uses the coaching overlay, see [Placing objects and handling 3D interaction](/documentation/ARKit/placing-objects-and-handling-3d-interaction).

### Supporting Automatic Coaching

By default, [`activatesAutomatically`](/documentation/ARKit/ARCoachingOverlayView/activatesAutomatically) is enabled and therefore you should override [`coachingOverlayViewWillActivate(_:)`](/documentation/ARKit/ARCoachingOverlayViewDelegate/coachingOverlayViewWillActivate(_:)) to determine whether coaching is in progress. Coordinate your actions to help the user focus on these instructions, for example, by hiding any UI that’s not necessary while the session reinitializes.

### Relocalizing After an Interruption

If relocalization is enabled (see [`sessionShouldAttemptRelocalization(_:)`](/documentation/ARKit/ARSessionObserver/sessionShouldAttemptRelocalization(_:))), ARKit attempts to restore your session if any interruptions degrade your app’s tracking state. In this event, the coaching overlay presents itself and gives the user instructions to assist ARKit with relocalizing.

![User instruction to return to the user’s previous location so ARKit can restore the session. ](images/com.apple.arkit/media-3394488@2x.png)

During this time, the coaching overlay includes a button that lets the user indicate they’d like to start over rather than restore the session.

![Button that enables the user to indicate they’d like to start over rather than restore the session.](images/com.apple.arkit/media-3394474@2x.png)

ARKit notifies you when the user presses Start Over by calling your delegate’s [`coachingOverlayViewDidRequestSessionReset(_:)`](/documentation/ARKit/ARCoachingOverlayViewDelegate/coachingOverlayViewDidRequestSessionReset(_:)) function. Implement this callback if your app requires any custom actions to restart the AR experience.

```swift
func coachingOverlayViewDidRequestSessionReset(_ coachingOverlayView: ARCoachingOverlayView) {    

    // Reset the session.
    let configuration = ARWorldTrackingConfiguration()
    configuration.planeDetection = [.horizontal, .vertical]
    session.run(configuration, options: [.resetTracking])

    // Custom actions to restart the AR experience. 
    // ...
}
```

If you do not implement [`coachingOverlayViewDidRequestSessionReset(_:)`](/documentation/ARKit/ARCoachingOverlayViewDelegate/coachingOverlayViewDidRequestSessionReset(_:)), the coaching overlay responds to the Start Over button by resetting tracking, which also removes any existing anchors.

For more information about relocalization, see [Managing Session Life Cycle and Tracking Quality](/documentation/ARKit/managing-session-life-cycle-and-tracking-quality).

## Topics

### Delegating Events

[`delegate`](/documentation/ARKit/ARCoachingOverlayView/delegate)

An object you supply that implements coaching event callbacks.

[`ARCoachingOverlayViewDelegate`](/documentation/ARKit/ARCoachingOverlayViewDelegate)

A set of callbacks you implement to be notified of coaching events.

### Defining a Goal

[`goal`](/documentation/ARKit/ARCoachingOverlayView/goal-swift.property)

A field that indicates your app’s tracking requirements.

[`ARCoachingOverlayView.Goal`](/documentation/ARKit/ARCoachingOverlayView/Goal-swift.enum)

The options that specify your app’s tracking requirements.

### Activating the View

[`activatesAutomatically`](/documentation/ARKit/ARCoachingOverlayView/activatesAutomatically)

A flag that indicates whether the coaching view activates automatically, depending on the current session state.

[`isActive`](/documentation/ARKit/ARCoachingOverlayView/isActive)

A flag that indicates whether coaching is in progress.

[`setActive(_:animated:)`](/documentation/ARKit/ARCoachingOverlayView/setActive(_:animated:))

Controls whether coaching is in progress.

### Providing the Session

[`session`](/documentation/ARKit/ARCoachingOverlayView/session)

The session this view uses to provide coaching.

[`sessionProvider`](/documentation/ARKit/ARCoachingOverlayView/sessionProvider)

An object you designate that provides the current session.



---

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)