Logo for tanaschita.com

Supporting Reduced Motion accessibility setting in SwiftUI

Learn how to respect system settings for reduced motion to improve usability for motion-sensitive users.

14 Jul 2025 · 3 min read

The goal of supporting the Reduced Motion setting is to support users who are sensitive to visual motion. Motion sensitivity can cause discomfort such as nausea, dizziness, or headaches, especially when animations include scaling, spinning, or rapid movement.

Let's look at how we can support Reduced Motion in our iOS apps.

Sponsorship logo
Architecture & Design Patterns for iOS
This book is a practical guide to essential architectural principles and design patterns for iOS development. It covers strategies for building maintainable apps with Swift and SwiftUI, including dependency injection, navigation, common patterns, and modularization.
LEARN MORE

Users can enable this setting in the iOS Settings app under Accessibility → Motion → Reduce Motion. If enabled, users may also choose to Prefer Cross-Fade Transitions, which replaces more intense system animations with simple fade transitions, for example, when opening or closing apps.

We can respect this setting by reducing or disabling non-essential animations in our apps, especially those that serve decorative or transitional purposes.

SwiftUI provides the accessibilityReduceMotion environment value, which we can use to check whether Reduced Motion is enabled:

@Environment(\.accessibilityReduceMotion) private var reduceMotion

With this, we can conditionally modify animations based on the user’s preference:

struct AnimatedLogo: View {
@Environment(\.accessibilityReduceMotion) private var reduceMotion
var body: some View {
Image(systemName: "star.fill")
.rotationEffect(reduceMotion ? .zero : .degrees(360))
.animation(
reduceMotion ? nil : .linear(duration: 1).repeatForever(autoreverses: false),
value: reduceMotion
)
}
}

In this example, if Reduce Motion is enabled, the animation is disabled entirely. Otherwise, the image spins continuously.

We could also consider switching to simpler transition styles, like using .opacity instead of .scaleEffect or .offset, to respect the user's preference while maintaining functional transitions.

Note: If we also wanted to check whether Prefer Cross-Fade Transitions is enabled, we can use UIAccessibility.prefersCrossFadeTransitions. There's currently no environment value available for that setting in SwiftUI.

Sponsorship logo
Preparing for a technical iOS job interview
Preparing for a technical iOS Job Interview with over 300 questions & answers. Covering Swift & Objective-C, SwiftUI & UIKit, Combine, HTTP Networking, iOS File System, Core Data, Concurrency with async/await, Security, Automated Testing, Dependency Management, AI & Machine Learning and more.
LEARN MORE
Sponsorship logo
Architecture & Design Patterns for iOS
This book is a practical guide to essential architectural principles and design patterns for iOS development. It covers strategies for building maintainable apps with Swift and SwiftUI, including dependency injection, navigation, common patterns, and modularization.
LEARN MORE
Sponsorship logo
Become a sponsor of tanaschita.com
By publishing an article on different iOS topics every week, tanaschita.com is constantly growing in the developer community and may provide a great audience for you as a sponsor.
CLICK TO LEARN MORE

Newsletter

Image of a reading marmot
Subscribe

Like to support my work?

Say hi

Related tags

Articles with related topics

accessibility

swiftui

ios

Making custom SwiftUI controls accessible with accessibilityRepresentation

Learn how to give a custom control the accessibility behavior of a native SwiftUI control.

19 Oct 2026 · 5 min read

Latest articles and tips

© 2026 tanaschita.com

Privacy policy

Impressum