Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 스위프트
- 클린 코드
- collectionview
- combine
- 리팩토링
- Observable
- ribs
- clean architecture
- 리펙터링
- swift documentation
- 리펙토링
- UICollectionView
- ios
- HIG
- Human interface guide
- RxCocoa
- UITextView
- uitableview
- Protocol
- Refactoring
- swiftUI
- uiscrollview
- Xcode
- 애니메이션
- rxswift
- tableView
- SWIFT
- map
- Clean Code
- MVVM
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 3. VoiceOver 접근성 실전 - 접근성 처리 (순서 처리, 이미지 인식, Label, Value, Traits, Hint 사용) 본문
iOS 응용 (swift)
[iOS - swift] 3. VoiceOver 접근성 실전 - 접근성 처리 (순서 처리, 이미지 인식, Label, Value, Traits, Hint 사용)
jake-kim 2023. 9. 4. 01:441. VoiceOver 접근성 실전 - 개발 시작하기 (손쉬운 사용 단축키, Accessibility Inspector, 테스트)
3. VoiceOver 접근성 실전 - 접근성 처리 (순서 처리, 이미지 인식, accessibility label, value, traits, hint 사용)
4. VoiceOver 접근성 실전 - UIAccessibility Notification (post, 노티)
5. VoiceOver 접근성 실전 - 접근성 계층관계
UIImageView 접근성
- UIImageView는 접근성 focus가 가면 OS 내부적으로 이미지를 인식하여 설명해주는 기능이 존재
- "띠링-"이라는 소리와 함께 이미지를 인식하여 설명해주는 기능
ex) VoiceOver가 읽어주는 내용: "띠링-" "초록색 바탕의 주황빛 도는 도토리를 들고 있는 다람쥐"
- 이미지를 인식하여 읽어주는 기능은 VoiceOver에서 활성화 할 수 있으며, 디폴트는 비활성화인 상태
- 활성화 방법: 설정 > 손쉬운 사용 > VoiceOver > VoiceOver 인식 > 이미지 설명 활성화
접근성 처리 - 그룹화 & 순서
- 접근성 처리 할 때 aView, bView, cView 순서대로 동작되도록 하고 싶거나, 특정 뷰만 focus가 동작하도록 할 수 있는 방법은 accessibilityElements를 사용하면 빠르게 처리가 가능
ex) 현재 3개의 뷰에 접성이 켜져있는 상태
- accessibilityElements의 값을 switch, label에만 부여하면 아래처럼 그룹화 및 입력한 배열 요소 순서대로 동작
profileContainerView.accessibilityElements = [switchButton, label]
- 주의사항)
- elements를 지정할 때, elements를 감싸고 있는 바로 위 뷰에 적용해야 동작
- 만약 profileContainerView가 아닌, profileContainerView의 아래에 있는 view에 적용하면 처리가 안되므로 주의
// 잘못된 코드
// switchButton, label의 superview인 containerView가 아닌, containerView의 superview에 적용하면 동작 x
view.accessibilityElements = [switchButton, label]
view, profileContainerView 구조 참고)
class ViewController: UIViewController {
private let profileContainerView = UIView()
private let thumbnailImageView = UIImageView()
private let label = UILabel()
private let switchButton = UISwitch()
override func viewDidLoad() {
super.viewDidLoad()
setupAccessibility()
view.addSubview(profileContainerView)
profileContainerView.addSubview(thumbnailImageView)
profileContainerView.addSubview(switchButton)
profileContainerView.addSubview(label)
...
}
func setupAccessibility() {
view.accessibilityElements = [switchButton, label]
}
}
접근성 Label, Value, Traits, Hint 순서
- 접근성에 관련된 프로퍼티가 여러개 있지만 (accessibility Label, Value, Traits, Hint ...) 이것에 대한 개념(마침표 찍는지 유무, 문장으로 할지 단어로 할지)는 이전 포스팅 글을 참고
- accessibility Label, Hint, Value를 사용하여 접근성을 부여할 때 순서가 중요
- accessibility Label, Value, Traits, Hint를 설정했을때 VoiceOver가 읽어주는 순서
Label -> Value -> {Traits 속성 이름} -> Hint
- 만약 UIImageView에서 이미지 설명 기능을 활성화 한 경우, 이미지 설명은 마지막에 붙는 형태
Label -> Value -> {Traits 속성 이름} -> Hint -> {이미지 설명}
ex) UILabel에 아래처럼 설정
- 보이스 오버: "라벨 벨류 머리말 힌트 문구입니다."
label.accessibilityLabel = "라벨"
label.accessibilityValue = "벨류"
label.accessibilityTraits = .header // "머리말"
label.accessibilityHint = "힌트 문구입니다."
ex) UIImageView에서 이미지 설명 옵션을 enable한 경우
- 보이스 오버: "라벨 벨류 머리말 힌트 문구입니다. 사람"
- "사람" 부분은 os에서 읽어준 것이고 맨 마지막에 동작
private let thumbnailImageView = {
let view = UIImageView()
view.image = UIImage(systemName: "person.crop.circle")
view.contentMode = .scaleToFill
view.isAccessibilityElement = true
return view
}()
...
thumbnailImageView.accessibilityLabel = "라벨"
thumbnailImageView.accessibilityValue = "벨류"
thumbnailImageView.accessibilityTraits = .image
thumbnailImageView.accessibilityHint = "힌트 문구입니다."
'iOS 응용 (swift)' 카테고리의 다른 글
Comments