스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
접근성 높은 공간 경험 생성하기
모든 사람에게 적합한 공간 컴퓨팅 앱을 만드는 방법을 알아보세요. 여느 Apple 플랫폼과 마찬가지로 visionOS는 접근성을 고려해 디자인되었습니다. VoiceOver와 Pointer Control을 비롯한 보조 기술을 재생성하고 Dwell Control 같은 기능을 디자인해 사용자가 자신에게 가장 적합한 방식으로 상호 작용할 수 있도록 지원하는 방법을 공유합니다. 시각과 움직임, 인지, 청각 접근성에 대한 모범 사례를 배우고 모든 사람이 visionOS의 몰입형 경험을 즐길 수 있도록 돕는 방법을 알아보세요.
챕터
리소스
- Accessibility
- Diorama
- Improving accessibility support in your visionOS app
- Media Accessibility
- UIAccessibility
관련 비디오
WWDC23
WWDC22
WWDC21
WWDC20
WWDC19
-
다운로드
♪ 감미로운 인스트루멘탈 힙합 ♪ ♪ 안녕하세요, 댄입니다 손쉬운 사용 팀 소속이에요 동료인 드루와 함께 공간 컴퓨팅의 접근성을 이야기할 수 있게 되어 정말 기쁩니다 이번 세션에서는 이 플랫폼에서 사용할 수 있는 손쉬운 사용 기능 몇 가지를 간략히 다루고자 합니다 그런 다음 앞이 보이지 않거나 저시력인 사용자를 지원하도록 앱에서 어떤 일을 할 수 있는지 자세히 살펴보겠습니다 이후 드루가 합류해서 공간 컴퓨팅의 운동과 인지, 청각 접근성을 소개할 겁니다 그럼 시작해 보죠 저희가 디자인한 건 모두를 위한 몰입형 플랫폼입니다 공간 컴퓨팅 경험은 근사한 시각적 기능과 다양한 손동작 입력으로 빌드되는 경우가 많지만 이를 사용하는 데 시각이나 물리적인 움직임이 꼭 필요한 것은 아닙니다 사실 이런 경험은 시각 장애인이나 저시력자 혹은 거동이 불편하거나 팔다리에 장애가 있는 사람에게 크게 영향을 미칠 수 있습니다 예를 들어 시각 장애인이라면 디스플레이에 표시된 내용을 보지 않고도 현실과 상호 작용 할 수 있겠죠 따라서 앱을 빌드할 때는 모두 즐겁게 앱을 사용하고 혜택을 누릴 수 있도록 다양한 능력의 사용자를 고려해야 합니다 Apple은 기술에 대한 액세스가 기본적인 인권이라는 것을 인식하고 있으며 이 플랫폼은 1세대 제품에 포함된 손쉬운 사용 기능을 가장 많이 포함하고 있습니다 동적 타입 지원이나 대비 증가, 음성 콘텐츠 기능 등 이미 잘 알려져 있고 사랑받는 기능이 여럿 포함돼 있죠 또한 공간 컴퓨팅을 위한 주요 보조 기술을 특별히 재구상했습니다 이런 기능을 선보이게 되어 정말 설레네요 여러분은 개발자로서 모든 사용자를 아우르도록 경험을 빌드하여 힘을 보태실 수 있습니다 시각 장애인이나 저시력자를 앱에서 지원하는 방법부터 알아보도록 합시다 시각 접근성을 논의할 때 고려할 사항이 몇 가지 있는데요 바로 VoiceOver 지원과 시각 디자인, 움직임입니다 VoiceOver부터 살펴보죠 VoiceOver는 내장 스크린 리더로 모든 Apple 플랫폼에서 사용할 수 있습니다 이 플랫폼에도 적용하게 되어 기쁩니다 드루와 제가 그간 재밌는 앱을 작업해 왔는데요 ARKit와 RealityKit를 활용하며 이름은 Happy Beam입니다 이 앱에서는 손으로 하트 제스처를 보내 찡찡대는 구름을 행복하게 만들 수 있습니다 해당 앱에서 VoiceOver 경험을 향상하는 방법을 살펴봅시다 손쉬운 사용 단축키에 VoiceOver를 추가해 볼게요 설정에서 손쉬운 사용 메뉴를 찾아 손쉬운 사용 단축키를 설정하면 Digital Crown을 세 번씩 눌러 VoiceOver를 켜고 끌 수 있습니다 앱의 접근성을 테스트할 때 유용한 도구죠 앱을 열고 Digital Crown을 세 번 눌러 VoiceOver를 켜 보겠습니다 ♪ 우아한 기악곡 ♪ Happy Beam입니다 찡찡대는 구름을 어떻게 달래 줄지 선택하세요 이 플랫폼에서 VoiceOver는 양손에 다르게 설정된 손가락 핀치로 다른 동작을 수행합니다 기본적으로 검지를 핀칭해서 다른 항목으로 초점을 이동할 수 있습니다 ♪ '양손으로 하트 만들기' 버튼 '핀치 제스처 혹은 호환 가능 기기 사용하기' 버튼 이전 항목으로 초점을 옮기려면 오른손 중지를 핀칭하세요 '양손으로 하트 만들기' 버튼 항목을 활성화하려면 오른손 약지나 왼손 검지를 핀칭하세요 VoiceOver 제어 기능에 어느 정도 익숙해졌으니 앱을 마저 둘러봅시다 셋, 둘, 하나 Happy beam입니다 뒤로 가기 버튼, 점수 0점 음악 중지 버튼 잔여 시간 29초 일시 정지 버튼 여기까지는 꽤 그럴듯하네요 SwiftUI로 빌드한 앱이라서 표준 컨트롤 기능 대다수가 이미 접근성이 좋습니다 또한 나머지 뷰에서 SwiftUI의 접근성 수정자를 특별히 채택해 VoiceOver에서 적절한 접근성 정보를 제공받도록 했습니다 더 자세히 알고 싶다면 SwiftUI 접근성 관련 세션을 참고해 보세요 앱을 더 살펴보면서 구름과 상호 작용하는 방법을 알아보도록 할게요 닫기 버튼, 팝업 앱 배치 막대 앱 배치 막대 앱 배치 막대 이런 소리가 들리면 VoiceOver가 상호 작용 할 항목이 더는 없다는 뜻입니다 VoiceOver가 구름에 액세스할 수 없는 거죠 구름은 RealityKit로 생성했으므로 RealityKit에서 사용 가능한 새 접근성 컴포넌트를 통해 해당 사항을 수정할 수 있습니다 접근성 컴포넌트를 사용해 RealityKit 엔티티에서 접근성 프로퍼티를 지정할 수 있어요 접근성 레이블과 값, 특성부터 맞춤형 로터, 맞춤형 콘텐츠 맞춤형 동작까지 설정할 수 있죠 활성화나 조정 가능 동작 같은 시스템 접근성 동작도 설정할 수 있고요 구름에 액세스할 수 있도록 새 접근성 컴포넌트를 생성하고 isAccessibilityElement를 true로 설정해서 보조 기술에 구름을 탐색할 수 있어야 한다고 알려 줍니다 그런 다음 구름에 버튼 특성을 부여해서 Switch Control이나 Voice Control 같은 기술에 이런 구름이 사용자 대화형 항목이라는 걸 알려 줍니다 또한 playsSound 특성에도 버튼 특성을 부여할게요 구름이 행복해지면 소리를 내거든요 이후 label 프로퍼티를 통해 구름에 이름을 붙이고 기분 상태를 나타내는 값을 설정합니다 앱의 상태가 업데이트될 때마다 접근성 컴포넌트에서 관련 있는 프로퍼티를 업데이트해야 합니다 isHappy 변수의 didSet 핸들러에서는 편의 프로퍼티를 사용해 구름의 접근성값을 업데이트하고 있습니다 편의 프로퍼티를 사용할 때마다 접근성 컴포넌트의 해당 프로퍼티가 그에 따라 업데이트됩니다 레이블과 값은 문자열 리터럴을 사용해 생성하는 LocalizedStringResource로 저장되는데 여러분이 런타임에 제공한 현지화된 값으로 자동으로 분할됩니다 마지막으로 엔티티 컴포넌트 목록에서 컴포넌트를 설정할게요 이제 구름에 액세스할 수 있게 됐으니 앱에서 살펴보죠 ♪ 앱 배치... 찡찡대는 구름 버튼 좋습니다 이제 구름을 탐색하고 상태를 알 수 있어요 VoiceOver는 공간 음향을 사용해 객체가 어디에 있는지 단서를 제공합니다 그럼 이제 구름에 하트 제스처를 보내서 행복하게 만들어 봅시다 ♪
이게 뭐죠? 사랑을 듬뿍 줬는데 구름은 여전히 찡찡대네요 VoiceOver를 활성화하면 앱에서 손동작 입력을 기본값으로 받지 않기 때문입니다 이는 사용자가 VoiceOver 제스처를 취했을 때 앱이 실수로 동작을 수행하는 일 없이 안전하게 앱을 탐색하도록 돕는 겁니다 이 플랫폼에서는 VoiceOver에 새로 포함된 직접 제스처 모드를 활성화하면 VoiceOver에서 표준 제스처를 처리하지 않고 손동작 입력을 앱에서 직접 처리하게 됩니다 사용자가 앱을 실행할 때 직접 제스처 모드와 VoiceOver 기본 상호 작용 모드 중 하나를 고를 수 있어요 모드별로 접근성 면에서 고려해야 할 사항이 있습니다 그럼 우선 VoiceOver 기본 상호 작용 모드를 살펴보도록 할게요 VoiceOver를 사용해 구름을 행복하게 만들 수 있도록 활성화 동작을 추가할게요 accessibilityComponent의 systemActions 프로퍼티에 활성화 동작을 추가합니다 그런 다음 RealityView 내부 콘텐츠의 활성화 이벤트를 구독합니다 콜백에서 활성화 이벤트를 받을 때마다 게임 모델을 업데이트해서 관련 있는 구름의 상태를 알맞게 업데이트할 겁니다 동작이 추가된 앱을 다시 살펴보겠습니다 앱 배치... 닫기 버튼 찡찡대는 구름 찡찡대는 구름 훌륭해요 이제 VoiceOver를 사용해서 구름을 행복하게 만들 수 있습니다 AccessibilityComponent는 추가 API도 제공합니다 맞춤형 동작과 맞춤형 로터 맞춤형 콘텐츠 등이 있죠 앱의 접근성 경험을 향상하는 데 아주 좋은 도구예요 더 자세히 알고 싶다면 해당 주제와 관련된 세션들을 시청해 보세요 이제 직접 제스처 모드를 알아보죠 이 플랫폼에서 VoiceOver를 사용하면서 앱과 상호 작용할 수 있는 새로운 방법입니다 VoiceOver의 활성화 동작은 직접 제스처 모드에서 사용할 수 없으므로 대신 사용할 손동작 입력 상호 작용에 대해 피드백을 제공해야 합니다 구름이 등장하면 알림을 포스팅해서 구름과 월드 내 구름 위치를 설명하도록 하겠습니다 새 AccessibilityNotification을 Announcement 유형으로 생성하고 말하고 싶은 문자열을 전달한 다음 알림에서 post 함수를 호출합니다 공간 경험에서는 어떤 항목이 사용 가능하고 위치한 곳이 어디인지 정보를 제공하는 게 중요하므로 앱에서 중대한 알림이 될 겁니다 하트 제스처를 인식하거나 찡찡대던 구름이 행복해졌을 때도 알림을 포스팅해 봅시다 의미 있는 이벤트가 있을 때마다 VoiceOver에 알려서 어떤 상황인지 또 어떤 상호 작용을 수행하는지 명확히 파악하도록 하세요 예를 들어 완전 몰입형 앱에서 새로운 룸이나 환경에 입장하면 콘텍스트의 변경 사항을 VoiceOver에 알리고 월드에서 사용 가능한 새 항목을 설명해야 합니다 또한 동작을 수행할 때 소리를 활용하세요 Happy Beam에서는 구름이 행복해질 때 소리를 재생해서 앱에 재미를 더하고 공간감이 느껴집니다 구름이 변하는 모습을 직접 보지 못하더라도 말이죠 알림이 추가됐으니 마지막으로 앱을 둘러봅시다 게임이 시작되면 직접 제스처 모드를 활성화합니다 왼손 검지를 세 번 핀칭했다 멈추면 됩니다 이제 하트 제스처로 구름을 행복하게 만들고 모든 상호 작용에 대한 피드백을 얻을 수 있겠죠 셋, 둘, 하나 Happy Beam입니다 오른쪽 위와 앞에 구름 세 개 등장 직접 제스처 활성화 맨 위를 눌러... 빔 쏘기 ♪ 찡찡대는 구름 적중 빔 숨기기 아주 좋아요 수행하는 상호 작용 모두 바로바로 피드백을 받았죠 VoiceOver를 지원하도록 앱이 모양새를 갖춰 가는군요 저시력 사용자가 앱을 사용할 때 VoiceOver를 쓰지 않더라도 지원하는 방법은 무궁무진합니다 특히 맞춤형 컴포넌트나 제어 기능을 빌드하는 경우라면요 여느 Apple 플랫폼처럼 Dynamic Type 변경 사항에 앱이 응답하는지 확인하세요 특히 손쉬운 사용 설정에서 설정할 수 있는 최대 크기 텍스트일 때 잘 응답하는지 봐야겠죠 이렇게 텍스트 크기가 클 때 가로 배치보다 세로 배치가 적합한 UI에 대해 앱 감사 프로세스를 진행하세요 또한 포그라운드와 백그라운드의 대비 비율이 최소 4 대 1은 되어야 합니다 더 자세히 알고 싶다면 '앱을 시각적으로 액세스 가능하게 만들기'를 보세요 공간 경험에서는 앵커를 사용해 손이나 월드 내 특정 위치 등 다양한 앵커 포인트를 기준으로 콘텐츠를 배치할 수 있습니다 가상 카메라에 앵커링되도록 콘텐츠를 설정하면 디스플레이에서 동일한 지점에 콘텐츠가 나타날 겁니다 다른 Apple 플랫폼의 RealityKit에 있는 카메라 앵커에 익숙하실지 모르겠는데 이 플랫폼에서는 사용자가 주변을 둘러볼 때 머리 방향을 따라 콘텐츠가 이동하므로 저시력자에게 미치는 영향은 다를 수 있습니다 저시력 사용자가 콘텐츠 가까이 다가가서 내용을 읽고 자세히 살펴볼 수 있도록 헤드 앵커는 쓰지 않거나 드물게 사용해야 합니다 또한 접근성 줌 기능을 사용한다면 머리에 앵커링된 콘텐츠를 줌 렌즈 내에서 쉽게 배치할 수 없을 겁니다 줌 렌즈도 머리에 앵커링돼 있으니까요 대신 월드 앵커를 사용하거나 콘텐츠를 지연시킨 후에 느리게 움직이세요 헤드 앵커를 꼭 사용해야 하는 특수한 경우에는 콘텐츠를 장식용으로 유지하세요 중요한 정보는 헤드 앵커 콘텐츠를 통해서만 액세스하도록 설정하면 안 됩니다 헤드 앵커가 앱에서 가장 좋은 주요 경험이 될 수 있더라도 헤드 앵커의 대안을 항상 제공하세요 SwiftUI의 새로운 환경 변수 accessibilityPrefers HeadAnchorAlternative와 접근성 프레임워크의 API AXPrefersHeadAnchorAlternative는 대체 앵커를 언제 사용해야 하는지 알려 줍니다 앱이 헤드 앵커를 사용하는 곳에서 이런 API를 눈여겨보세요 이런 API를 시스템에 도입하고자 각별히 노력했습니다 기본적으로 Control Center는 축소된 상태에서 머리에 앵커링돼 있습니다 지금 보시다시피 주변을 둘러보면 Control Center가 그대로 따라옵니다
이런 디자인을 통해 Control Center에 어디서든 쉽게 액세스할 수 있지만 일부 사용자에게는 어려울 수 있습니다 앞서 언급했듯이 줌도 머리에 앵커링돼 있는데요 줌은 저시력자를 위해 콘텐츠를 확대해 주는 기능입니다 줌이 활성화되거나 사용자가 헤드 앵커보다 대안을 선호할 경우 Control Center는 y축을 중심으로 자유롭게 이동합니다 여기서 보시다시피 고개를 위로 들면 줌 렌즈는 그대로 따라오지만 Control Center는 아닙니다 줌 렌즈 내부에 Control Center를 배치하고 상호 작용할 수 있습니다 앱에서 동작을 사용할 때도 유의해야 합니다 일부 사용자에게는 동작이 어지럽게 느껴질 수 있고 헤드셋을 착용하는 게 아주 거슬릴 수 있습니다 미세한 동작 효과를 사용하더라도 말이죠 앱에서 사용자가 빠르게 이동하거나 깡충깡충 뛰거나 흔들거리는 동작은 피하는 게 좋습니다 줌 애니메이션이나 둘 이상의 축을 따라 이동하는 애니메이션 돌기 또는 회전 효과 지속적인 백그라운드 효과도 모두 피해야 합니다 동작 줄이기를 활성화해서 이런 애니메이션을 대체할 수 있는 방안을 항상 제공하세요 SwiftUI의 환경 변수 accessibilityReduceMotion으로 동작 줄이기가 작동 중인지 확인할 수 있습니다 UIKit에서 UIAccessibility의 isReduceMotionEnabled를 쿼리하고 해당 알림을 사용해서 설정의 변경 사항을 확인할 수 있고요 앱에서 동작을 대체할 방안을 찾기 힘들다면 크로스페이드를 활용해 보세요 동작 줄이기 기능을 시스템에 도입하는 방법을 예시로 살펴볼게요 후드산 환경에서 배경에 있는 물을 살펴봤더니 계속 잔물결이 일고 있습니다 동작 줄이기를 실행하면 잔물결이 멈춘 상태로 표현되죠 동작을 사용하지 않고도 동일한 시각 효과를 얻게 됐습니다 앱에서 시각 접근성을 향상하는 방법을 간략히 알아봤어요 운동과 인지 청각 접근성과 관련해서도 고려할 사항이 아주 많습니다 드루가 설명해 줄 거예요 고마워요, 댄 수고 많았어요 저는 드루 하스입니다 손쉬운 사용 팀에서 엔지니어로 일하고 있어요 공간 경험의 시각 접근성을 향상하는 유용한 방법을 알아봤으니 이제 신체 및 운동 기능이나 인지, 청각 장애가 있는 사용자를 아우를 수 있도록 앱을 생성하는 방법을 여러분과 최대한 공유하고 싶습니다 운동 장애부터 살펴보죠 기본 입력 시스템은 눈과 손의 조합으로 작동해요 예를 들어 눈으로 버튼을 주시하면서 손을 핀칭하면 선택 이벤트가 전송되어 버튼을 활성화합니다 하지만 이런 신체 동작을 수행할 수 없는 사용자도 있겠죠 Apple의 손쉬운 사용 기능은 눈이나 손 혹은 눈과 손 모두에 장애가 있는 사용자를 위한 대체 입력 방식을 제공합니다 Dwell Control 접근성 기능을 사용하면 손을 쓰지 않고도 UI를 선택하고 상호 작용 할 수 있습니다 Dwell Control 지원 제스처는 탭과 스크롤 길게 누르기, 드래그 등입니다 Dwell Control 사용자가 소외되지 않도록 이런 제스처로 전체 기능을 갖출 수 있게 앱을 디자인해야겠죠 Dwell Control 메뉴를 사용하면 제스처 모드를 손쉽게 전환할 수 있고 효율성을 해치지 않으면서 편의 기능을 사용해 기기를 작동할 수 있습니다 기본 설정이 아닌 입력을 사용하더라도 디자인을 통해 수월한 경험을 제공하는 거죠 Happy Beam 앱이 어떤 방식으로 디자인되어 다양한 입력을 지원하는지 살펴봅시다 덕분에 Dwell Control로 게임을 온전히 즐기게 됐죠 Happy Beam 앱을 시작하면 찡찡대는 구름을 달랠 방법부터 선택하게 됩니다 첫 번째 옵션은 앞서 살펴봤듯 양손으로 하트를 만들어 구름에 빔을 쏘는 방법이죠 두 번째 옵션은 키보드나 게임 컨트롤러처럼 블루투스 액세서리를 지원합니다 이런 입력 방식으로 게임을 진행하면 이 하트 총으로 빔이 발사합니다 하트 총은 탭 앤드 드래그 제스처에 응답해서 한 손만 사용해 게임할 수 있죠 Dwell Control을 통해 게임하는 사용자는 총을 자유자재로 사용할 수 있습니다 Happy Beam처럼 다양한 입력을 지원하도록 앱을 계획하고 디자인해 보세요 혹시라도 실수로 소외되는 사람이 생기지 않도록 예방하는 최선의 방법입니다 Dwell Control과 함께 잘 작동하는 손쉬운 사용 기능이 하나 더 있습니다 바로 Pointer Control인데요 제가 아주 좋아하는 손쉬운 사용 기능이랍니다 입력 경험을 변환해서 눈 대신 다양한 입력 소스를 사용해 시스템 초점을 제어하도록 도와주는 기능이죠 눈이 기본값이지만 설정을 바꿀 수 있어요 시스템 초점을 머리 위치나 손목, 검지로 조정하도록요 Pointer Control로 머리 위치를 따르도록 입력 신호를 바꿀 수 있으므로 카메라에 앵커링된 콘텐츠는 적게 사용해야 합니다 따라서 월드 앵커를 사용하거나 카메라 앵커 콘텐츠에 대한 대안을 마련해야겠죠 Dwell Control과 Pointer Control 모두 자체적으로 혹은 결합된 기능을 활용해 사용자가 기기와 상호 작용 하는 방식에 엄청난 유연성을 제공합니다 이런 기능은 시스템 사용을 위한 물리적 요구 사항을 수용하죠 앱을 사용하는 사람에게 어떤 장애가 있을지 알 수 없기 때문에 물리적 상호 작용에 대한 다양한 방안을 허용해 두세요 공간 경험은 콘텐츠와 상호 작용 하는 새롭고 다채로운 방법을 마련해 줍니다 Switch Control에 도입된 새 메뉴 옵션으로 월드 공간 내 카메라의 위치를 조정할 수 있습니다 Switch Control로 키보드를 사용해 새 카메라 위치 수정자를 활성화해 보겠습니다 이렇게 하면 몸은 그대로 있지만 공간 위치가 아래로 이동합니다 주어진 환경에서 편안하고 자유롭게 움직이지 못하는 사람도 있겠죠 이러한 카메라 위치 옵션은 Switch Control에서 사용할 수 있지만 사용자가 특정 방식으로 자기 위치를 정해야 한다면 우회 옵션을 제공하세요 이어서 인지 접근성을 소개하고 학습과 기억, 정보 처리 능력에 장애가 있는 사용자를 어떻게 지원할 수 있을지 알아보도록 할게요 사용법 유도는 인지 접근성 기능으로 시스템을 단일 앱으로 제한해 집중력을 높입니다 방해 요소를 최소화하도록 다른 앱을 백그라운드로 전환하고 주의를 산만하게 하는 장식용 UI를 제거하며 사용자의 경험을 방해할 만한 하드웨어 버튼 이벤트를 억제하죠 이렇게 시스템을 조정하면 방해 요소를 걱정하거나 옆길로 샐 염려 없이 현재 작업에 집중하는 게 한결 수월해지겠죠 사용법 유도를 더 자세히 알아보고 맞춤형 제한 API를 구현하고 싶다면 작년에 제가 진행했던 '액세스 가능한 단일 앱 모드 환경 생성하기' 세션을 보세요 인지 접근성 모범 사례를 살펴보면서 모두가 사용하기 쉬운 앱을 만들어 보시길 바라요 특히 장애가 있는 사람에게 도움이 되도록요 앱을 제대로 이해하는 데 좀 더 도움이 필요한 사람도 있을 겁니다 복잡한 손동작이 필요한 상호 작용은 이해하고 기억하기에 어려울 수 있어요 SwiftUI 같은 Apple의 UI 프레임워크를 사용하면 일관되고 친숙한 시각 경험을 생성할 수 있을 겁니다 이렇게 하면 가까운 시일 내에 앱을 편안하게 사용할 수 있겠죠 동일한 UI 프레임워크로 빌드한 다른 앱을 사용해 봤을 수 있으니까요 마지막으로 사용자가 스스로 몰입하고 앱에서 제공하는 기능을 모두 경험해 볼 수 있도록 기다려 주세요 경험을 다그칠 필요는 없어요 몰입형 콘텐츠는 집중력과 관심을 유발해서 감각 처리 장애가 있는 사람을 위한 편안한 환경을 생성하는 데 효과적인 방법입니다 각자 정보를 처리하는 속도가 다르다 보니 일부 사용자는 경험을 통해 작업하는 데 시간이 좀 더 필요합니다 마지막으로 귀가 들리지 않거나 청력이 안 좋은 사용자에게 접근성과 편의를 제공하는 유용한 방법을 소개하고자 합니다 사용자가 공간 경험에 몰입하도록 도울 때 일반적으로 오디오와 음성을 사용하는데요 청력을 잃었거나 청각 처리 장애가 있는 사람에게 가장 효과적인 방법은 콘텐츠에 액세스할 수 있도록 양질의 캡션을 제공하는 겁니다 편안한 읽기 경험을 손쉽게 생성할 수 있는 팝온 캡션은 어구를 한 번에 렌더링해서 읽기 쉽습니다 반면 롤업 캡션은 단어별로 표시되어 읽기를 오랜 시간 지속하면 피로감과 메스꺼움을 유발합니다 기기에서 캡션의 시각적 모습을 사용자화할 수 있다는 사실 알고 계셨나요? 캡션은 광범위하게 사용자화할 수 있습니다 텍스트 크기와 서체, 색상 획 윤곽, 백그라운드 등을 변경할 수 있어요 이렇게 캡션을 사용자화해서 보고 읽기 쉽게 만들 수 있죠 AVKit와 AVFoundation은 앱에서 캡션을 제공하도록 내장 지원을 제공합니다 이런 프레임워크는 캡션의 모습과 시각적 스타일을 자동으로 관리하죠 자체 캡션 시스템을 구현해서 AVFoundation을 사용하지 않는다면 API 두 가지를 기억해 두세요 첫 번째는 isClosedCaptioningEnabled입니다 손쉬운 사용 설정에서 청각 장애인용 자막을 켜 뒀는지 확인할 때 사용할 수 있죠 앱에 캡션 설정이 별도로 있는 경우 이 API를 사용해서 캡션의 기본 상태를 알려야 합니다 이렇게 하면 캡션에 의존하는 사용자가 캡션에 바로 액세스할 수 있어요 두 번째는 스타일 속성별로 액세스하는 API가 있는 Media Accessibility 프레임워크에서 찾을 수 있습니다 전체 시스템에서 일관된 읽기 환경을 유지하려면 이러한 스타일을 확인하고 캡션에 적용해야 합니다 어떤 방식으로 캡션을 제공하든 품질 수준이 높아야겠죠 캡션은 음악과 효과음을 비롯해 모든 오디오 콘텐츠를 나타내야 합니다 방향성이 경험에 중요한 경우 공간 내 오디오의 출처 표시도 도움이 됩니다 가장 가까운 오디오 소스가 뒤에 있을 수 있다는 걸 사용자에게 기본적으로 알려 주는 거죠 사용자들이 접근성을 제대로 경험할 수 있게 하려면 모든 사람과 이들의 필요를 고려해야 합니다 엔티티에 접근성 프로퍼티를 설정해 풍부한 RealityKit 경험을 제공해 보세요 VoiceOver와 Voice Control Switch Control 같은 기술에 대한 앱의 접근성을 마련하는 기반이 될 겁니다 모든 플레이어와 플레이 스타일을 포함하도록 Happy Beam에서 봤듯이 유연성을 갖추고 물리적 상호 작용 옵션을 제공하세요 모호한 부분을 없애고 인지 장애가 있는 사용자에게 명확한 방식으로 집중력을 향상하도록 도와주세요 귀가 들리지 않거나 청력이 좋지 않은 사용자도 창작물을 즐길 수 있도록 오디오 경험을 위한 캡션이 달린 콘텐츠에 시간과 노력을 투자하시고요 어디서부터 시작해야 할지 모르겠다면 일단 손쉬운 사용 기능을 켜고 앱을 여세요! 이런 기능을 직접 사용해 봐야 제대로 시작할 수 있답니다 이 플랫폼은 모두를 위해 디자인됐습니다 오늘 저와 댄이 공유한 고려 사항을 모두 참고해서 액세스 가능하고 포용력 있는 공간 경험을 생성해 보세요 감사합니다 ♪
-
-
5:28 - 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" } }
-
8:04 - 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) }
-
9:23 - Announce meaningful events and changes in context
AccessibilityNotification.Announcement("8 clouds in front of you").post()
-
13:15 - Provide alternatives to head anchored content
// SwiftUI @Environment(\.accessibilityPrefersHeadAnchorAlternative) private var accessibilityPrefersHeadAnchorAlternative // UIKit AXPrefersHeadAnchorAlternative() NSNotification.Name.AXPrefersHeadAnchorAlternativeDidChange
-
15:04 - Provide alternatives when Reduce Motion is enabled
// SwiftUI @Environment(\.accessibilityReduceMotion) private var accessibilityReduceMotion // UIKit UIAccessibility.isReduceMotionEnabled UIAccessibility.reduceMotionStatusDidChangeNotification
-
23:35 - Check whether captions are enabled
UIAccessibility.isClosedCaptioningEnabled UIAccessibility.closedCaptioningStatusDidChangeNotification
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.