본문 바로가기

iOS

[iOS] - 접근성 - VoiceOver를 도입해보자!

  • VoiceOver란 iOS를 사용할 때 클릭을 하면 버튼, 라벨, 배터리 같은 오브젝트를 음성으로 들을 수 있는 도구입니다.
  • 아이폰 디바이스 설정의 손쉬운 사용에서 설정할 수도 있고 Siri를 통해 "보이스오버 켜줘/꺼줘"로 설정할 수 있습니다.
  • VoiceOver를 사용하게 되면 기존 사용과 다른 제스쳐가 필요합니다.

 

VoiceOver의 사용법을 알아보자.

VoiceOver의사용법을 먼저 알아보는 이유는 사용자가 보이스 오버를 어떻게 쓰는지 알면 더 적합하게 개발할 수 있을거라고 생각했습니다. 

VoiceOver 제스쳐 설명 애플 문서

 

https://help.apple.com/iphone/11/#/iph3e2e2281

To see this page, you must enable JavaScript. Pour afficher cette page, vous devez activer JavaScript. Zur Anzeige dieser Seite müssen Sie JavaScript aktivieren. このページを表示するには、JavaScript を有効にする必要があります。

help.apple.com

 

간단한 사용법

  • 탭을 한번 하면 음성으로 어떤 오브젝트인지 VoiceOver Cursor가 생깁니다.
  • 더블 탭을 할 시 VoiceOver Cursor가 생긴 오브젝트를 활성화 시켜줍니다.
  • 하단에서 위로 올리고 진동 한번 드랍(홈 화면), 더위로 올리고 진동 두번(앱화면)
  • 화면의 모든 내용을 읽을 땐 두 손가락으로 위로 swipe
  • 현재 VoiceOver Cursor부터 끝까지 읽을 땐 두 손가락으로 아래로 swipe
  • 기존의 좌우 swipe는 세 손가락으로 좌우 swipe
  • 세 손가락으로 세번 탭 화면 Screen Curtain으로 화면을 가릴 수 있음. 등등
  • 두 손가락을 원형으로 돌리면 로터가 생김! 설정 가능

등등!!

 

Accessibility Atrributes

 

Apple Developer Documentation

 

developer.apple.com

  • isAccessibility: Bool
    • 접근성을 하는 뷰인지 아닌지 체크할 수 있는 속성 true시 선택이 된다.
  • accessibilityLabel: String
    • 뷰를 선택했을 때 String값을 읽어줍니다.
  • accessibilityHint: String
    • accessibilityLabel보다 더 세부한 사항을 적는다. (사용자가 on/off 가능)
  • accessibilityValue
    • 값이 달라지는 요소에서 (ex 10%, 20%...100%)처럼 설정이 가능
  • accessibilityTraits
    • .image, .button, .none 등등 있다.
  • UIAcessibility.post
    • 앱 내의 변경사항이 있을 때 Notification을 통해 알려줄 수 있습니다.

 

VoiceOver를 도입하기 전 체크 해보자!!

1. accessibilityLabel → accessibilityTraits → accessibilityHint순으로 읽는다.

→ Traits를 적절하게 활용하자!

2. VoiceOver가 엑세스할 요소와 엑세스 하지 않을 요소 구분하기

→ 단순 이미지의 경우 String으로 표현하기가 어렵다..(CoreML이 발전한다면..)

3. VoiceOver는 UILabel, UIButton, UITabBar등 기본적인 View는 애플에서 자동 제공 해주며 CustomView를 인식하지 않는다.

→ Escpaer App에서는 대부분 CustomView가 많기 때문에 isAccessibility = true~

4. leading edge → trailing edge 순으로 읽는다.원하는 순서가 아닌 경우 Grouping을 지정하여 용이하게 가능!

var elements = [UIAccessibilityElement]()
let groupedElement = UIAccessibilityElement(accessibilityContainer: self)
groupedElement.accessibilityLabel = "\\(nameTitle.text!), \\(nameValue.text!)"
groupedElement.accessibilityFrameInContainerSpace = nameTitle.frame.union(nameValue.frame)
elements.append(groupedElement)

→ Escaper App은 대부분 위에서 아래로 읽고 커스텀 뷰이기 때문에 별도의 Grouping이 필요없다.

5. VoiceOver는 기본적으로 요소를 설명할 뿐 버튼의 클릭과 같은 상태는 별도로 개발자가 해주어야 한다.

→ 필터 해주는 옵션들을 선택했을 때 결과를 알려주자!!

 

 

후기

- 지금 프로젝트에서 커스텀뷰에서 VoiceOver를 적용하는 부분 -> 인식하게 해야해!!

- image를 탭했을 시 액션이 있는데 그걸 인식 못하는 부분 -> 인식하게 해야해!!

- 컨텍스트버튼에서 자체적으로 만든 뷰를 인식하는 부분  -> dismiss view 이렇게 말하는데 한글로 말해주고 싶다...

 

VoiceOver에 대해서 더 공부를 해봐야겠따.. 추후에도 또 블로깅! 

 

참고

 

 

iOS 접근성-VoiceOver 적용하기

요즘 서비스를 개발하면서 앱 접근성을 높이기 위해 여러 작업을 하고 있습니다. 오늘은 앱 접근성 중 시각 장애인의 앱 사용을 도와주는 VoiceOver 에 대해 간단히 알아보려고 합니다.

okanghoon.medium.com

 

 

Apple Developer Documentation

 

developer.apple.com

 

'iOS' 카테고리의 다른 글

[iOS] Appearance by Escaper  (0) 2021.12.06
[iOS] 데이터 순서 보장 by Escaper  (1) 2021.12.06
[iOS] - KingFisher 리드미 읽기~  (0) 2021.10.10
[iOS] - UserDefaults  (0) 2021.10.03
[iOS] Result Enum  (0) 2021.10.02