How to create intro animations for visionOS apps π¬

A strong introductory sequence can make your mixed-reality experience feel like it belongs in the user's world from the very first second.
Below is the exact workflow we used to build the launch animation for SpatialCut β a short, impactful sequence that fades seamlessly into the main window.
Skip to:
Link to this headingUsing Type Text
A clean intro can be as simple as animating your app title letter-by-letter. Apple's official Hello World VisionOS sample includes a ready-made TypeTextModifier.swift
that you can drop straight into your project β see the docs here.
But there's a catch. In the sample, the animation is baked into the same glass window as the main content:
App opens β Type Text runs β Main window fades in.
That doesn't quite leverage spatial computing's sense of presence. To really ground the animation in the user's environment we decided to run it on a transparent window and dismiss it once the animation is finished.
Link to this headingPersonalizing your window transparency
visionOS lets you choose different windowStyle
s:
automatic
(glass)plain
(transparent)volumetric
A window's style is fixed after creation, so if your intro should be transparent while your app UI remains glass, you must host the intro in its own window.
Our updated launch flow therefore looks like this:
App opens β Transparent window plays intro β Transparent window is dismissed β Main (glass) window opens.
Link to this headingAdding personalised shapes and colours
A Type Text animation is a great start, but we wanted something a little more pizzazz. The obvious route was to export a fancy Lottie animation and synchronise it with SFX and Type Text β but that quickly became unwieldy.
Instead, we leaned on SwiftUI: two brightly-coloured triangles animated via withAnimation
, perfectly synchronised with Type Text and our sound effects because everything is hard-coded.
The trade-offs are straightforward:
| Pros | Cons | | ---- | ---- | | β’ Full control & easy tweaks | β’ Limited to SwiftUI's primitive shapes | | β’ Single code path β perfect sync | |
For anything more complex (e.g. model animations) you can graduate to Reality Composer Pro, but that's fodder for another post.
Link to this headingClosing
Hope this was useful! I'll be diving deeper into visionOS dev topics soon, including:
- Leveraging native dev tools to craft unique UI experiences.
- Using Reality Composer Pro to generate bespoke assets & animations.
Feel free to reach out on X or LinkedIn if you have questions or suggestions β I'd love to see what you build.