2023 Spatial ComputingAccessibility & Inclusion
WWDC23 · 26 min · Spatial Computing / Accessibility & Inclusion
Create accessible spatial experiences
Learn how you can make spatial computing apps that work well for everyone. Like all Apple platforms, visionOS is designed for accessibility: We’ll share how we’ve reimagined assistive technologies like VoiceOver and Pointer Control and designed features like Dwell Control to help people interact in the way that works best for them. Learn best practices for vision, motor, cognitive, and hearing accessibility and help everyone enjoy immersive experiences for visionOS.
Watch at developer.apple.com ↗Chapters
Code shown on screen · 6 snippets
Use AccessibilityComponent with RealityKit
var accessibilityComponent = AccessibilityComponent()
accessibilityComponent.isAccessibilityElement = true
accessibilityComponent.traits = [.button, .playsSound]
accessibilityComponent.label = "Cloud"
accessibilityComponent.value = "Grumpy"
cloud.components[AccessibilityComponent.self] = accessibilityComponent
// ...
var isHappy: Bool {
didSet {
cloudEntities[id].accessibilityValue = isHappy ? "Happy" : "Grumpy"
}
} Add an activate action
var accessibilityComponent = AccessibilityComponent()
accessibilityComponent.isAccessibilityElement = true
accessibilityComponent.traits = [.button, .playsSound]
accessibilityComponent.label = "Cloud"
accessibilityComponent.value = "Grumpy"
accessibilityComponent.systemActions = [.activate]
cloud.components[AccessibilityComponent.self] = accessibilityComponent
// ...
content.subscribe(to: AccessibilityEvents.Activate.self, componentType: nil) { activation in
handleCloudCollision(for: activation.entity, gameModel: gameModel)
} Announce meaningful events and changes in context
AccessibilityNotification.Announcement("8 clouds in front of you").post() Provide alternatives to head anchored content
// SwiftUI
(\.accessibilityPrefersHeadAnchorAlternative)
private var accessibilityPrefersHeadAnchorAlternative
// UIKit
AXPrefersHeadAnchorAlternative()
NSNotification.Name.AXPrefersHeadAnchorAlternativeDidChange Provide alternatives when Reduce Motion is enabled
// SwiftUI
(\.accessibilityReduceMotion)
private var accessibilityReduceMotion
// UIKit
UIAccessibility.isReduceMotionEnabled
UIAccessibility.reduceMotionStatusDidChangeNotification Check whether captions are enabled
UIAccessibility.isClosedCaptioningEnabled
UIAccessibility.closedCaptioningStatusDidChangeNotification Resources
Related sessions
-
26 min -
14 min -
28 min -
10 min -
16 min -
11 min -
38 min -
9 min