-
Notifications
You must be signed in to change notification settings - Fork 0
기술 | VoiceOver
UIAccessibility는 NSObject 타입의 확장으로, 모든 뷰에서 사용할 수 있습니다.
extension NSObject {
open var isAccessibilityElement: Bool
open var accessibilityLabel: String?
open var accessibilityHint: String?
open var accessibilityValue: String?
open var accessibilityTraits: UIAccessibilityTraits
}
Label -> Value -> Traits -> Hint
보이스오버 모드에서 읽어 주어야 할 component들을 지정합니다.
일반적으로 Array에 담아 사용하며, 배열에 담긴 순서
대로 VoiceOver 모드에서 읽어줍니다.
[코딩동에서의 예시]
view.accessibilityElements = [titleLabel, bottomView, nextButton]
[일반적인 예시]
let elements = [header1, button1, button2, button3, button4, button5, button6, button7, button8, button9, header2, focusButton, header3, longPressLabel, header4, announcementButton, header5, imageView]
view.accessibilityElements = elements as [Any]
accessibilityLabel은 VoiceOver 모드에서 어떻게 읽어주어야 할 지 설정해 주는 이름을 붙여주는 작명가
역할을 수행합니다. 예를 들어 코딩동에서 홈 버튼 사용한 books.vertical
의 경우 SF symbol 그 자체의 이름은 book.vertical
로 읽히지만, 내 책장
으로 읽히도록 라벨링하였습니다.
애플 공식 가이드 라인에 따르면 좋은 Label 의 조건에는 다음과 같은 5가지가 있다고 합니다.
- 매우 간결하게 요소를 설명하라:
하나의 단어
로 구성하는 게 좋습니다. - 타입을 포함하지 말아라!
- Trait에서 이미 해당 요소에 대한 속성, 이를 테면 버튼, 머릿말이라든지에 대한 설명을 포함하고 있기 대문에 중복을 피하기 위해서라고 합니다.
- 예를 들어 "더하기 버튼" 이라고 이름을 지으면 보이스오버 모드에서 항상 '더하기 버튼(Label) 버튼(Trait)'로 읽히기 때문에 피하는 게 좋습니다.
- 대문자로 시작하라: 영문일 경우, 보이스 오버가 더 적절하게 읽을 수 있어서라고 합니다.
- 마지막을 마침표로 끝내지 말라: Label은 문장이 아니기 때문에 마침표로 끝내지 않는 게 좋습니다.
- 현지화하라: 보이스오버는 사용자가 내부 설정한 언어에 따라 읽어주기 때문에 현지화하도록 합시다.
accessibilityLabel이 작명가의 역할이라면 accessibilityValue는 명명한 사물의 세부적인 특징을 묘사 사용합니다.
이를 테면, UISlider
에서 해당 요소를 표기할 때는 accessibilityLabel 을 통해 슬라이더라고 이름 붙이겠지만, 그 세부값을 표기할 때는 accessibilityValue를 통해 60% 라고 표시할 수 있습니다.
accessibilityValue 는 항상 사용하는 게 아니라 세부 특징 묘사가 필요한 경우, 이를 테면 UISlider
에서 값을 표기하거나 TextField
안에 있는 text를 표시할 때 사용합니다.
해당 요소의 특징을 설명합니다. 다음은 accessibilityTraits 에서 사용할 수 있는 특성들입니다.
Button
Link
Search Field
Keyboard Key
Static Text
Image
Plays Sound
Selected
Summary Element
Updates Frequently
Not Enabled
None
힌트는 해당 컴포넌트의 액션에 대한 결과를 나타낼 때 사용합니다. 힌트는 반드시 label만으로 결과를 나타내기 어려울 경우에만 사용합니다 . 예를 들어, '노래 제목' 을 클릭했을 때, 노래가 재생되도록 하고 싶은 경우, 노래 제목(이미 Label을 통해 해당 라벨에 대한 힌트를 주고 있는 상태)만으로는 사용자가 해당 컴포넌트의 결과를 어렵기 때문에 '노래 재생하기'란 힌트를 추가해 줄 수 있습니다.
애플 공식 가이드 라인에 따르면 좋은 Hint 의 조건에는 다음과 같은 7가지가 있다고 합니다.
-
매우 간결하게 결과를 표현하라
- 사용자가 해당 요소를 사용하기 전, 사용법에 대한 설명을 듣는 데 소요되는 시간을 줄여주는 게 좋습니다.
- 그렇다고 해서 문법적으로 틀린 문장을 쓰라는 것은 결코 아닙니다. 예를 들어 "떡 추가" 보다 "떡들을 추가" 가 더 옳은 문장입니다.
-
동사로 시작하고, 주어를 생략해 줍니다.
- 명령형의 어조보다 친구한테 설명을 한다고 생각하고 써 주세요.
-
시작은 대문자로 시작하고, 맺을 때는 온점(.)을 사용합니다.
-
액션이나 제스처의 명칭을 포함하지 않습니다.
- 힌트는 사용자로 하여금 해당 행동을 하도록 유도하기 보다, 그 행동의 결과가 어떻게 될 지 사용자로 하여금
암시
하기 위해 사용합니다. - 따라서 노래를 재생하기 위해 탭해 주세요, 구입하기 위해 탭하세요, 삭제하기 위해 스와이프 하세요 는 바람직 하지 못한 힌트들입니다.
- 보이스 오버에서 사용자들은 이미 보이스 오버 모드에서 특화된 제스처들을 잘 알고, 사용하고 있습니다. 따라서 힌트에서 제스처에 대한 이름을 포함한다면, 사용자들은 매우 혼란스러울 것입니다.
- 힌트는 사용자로 하여금 해당 행동을 하도록 유도하기 보다, 그 행동의 결과가 어떻게 될 지 사용자로 하여금
-
컨트롤이나 뷰의 명칭을 포함하지 않습니다.
- 사용자는 이미 label을 통해 정보를 습득할 수 있습니다. 때문에 힌트에서는 해당 라벨에 대한 특성을 반복해 주지 않는 게 좋습니다.
- 따라서 '저장은 당신이 편집한 것은 저장해 줍니다' 라든지, '이전으로는 이전 화면으로 이동하게 해 줍니다' 라는 것들을 모두 불필요한 힌트들입니다.
-
컨트롤이나 뷰의 타입을 포함하지 않습니다.
- 사용자들은 이미 trait를 통해 해당 요소가 버튼인지, 검색창인지 어떻게 작동하는지를 압니다.
- 때문에 '이름을 추가하는 버튼', '확대하는 슬라이더' 라든지 하는 힌트는 모두 사족입니다.
-
현지화하라: Accessibility의 라벨을 만들 때는 유저가 선호하는 언어에 맞게 구성되어야 합니다.
업데이트 예정
STEP1 | STEP2 |
---|---|
✍🏻 Written By. JOY(Jiyoung Park, 박지영)