Search

[정리] SwiftUI - 애플 도큐먼트 튜토리얼 정리(4편)

contents

Swift

UUID(Universally Unique Identifier)

네트워크 상에서 고유성이 보장되는 id를 만들기 위한 표준 규약
중앙에서 관리되지 않는 분산 환경이라면 개별 시스템이 id를 발급하더라도 유일성이 보장되어야만 하기 때문에 범용고유식별자 UUID가 탄생했다.
128비트의 숫자, 32자리의 16진수로 표현된다. → 340,282,366,920,938,463,463,374,607,431,768,211,456개의 사용 가능한 UUID 값
8자리 - 4자리 - 4자리 - 4자리 - 12자리 패턴
이름
길이(바이트)
길이(16진수 숫자)
내용
time_low
4
8
시간의 low 32비트를 부여하는 정수
time_mid
2
4
시간의 middle 비트를 부여하는 정수
time_hi_and_version
2
4
최상위 비트에서 4비트 “version”, 그리고 시간의 high 12비트
clock_seq_hi_and_resclock_seq_low
2
4
최상위 비트에서 1-3비트, 그리고 13-15비트 클럭 시퀀스
node
6
12
48비트 노드 id
2345678–1234–1234–1234–1234567890ab
UUID버전은 1, 3, 4, 5가 있다. 이중 가장 많이 사용되는 건 1, 4버전이다.
1버전 : 타임스탬프를 기준으로 생성 → 호스트 Id, 시퀀스 번호 및 현재 시각으로 UUID 발급
4버전 : 랜덤 생성 → 무작위 UUID 생성
3버전 : MD5 해쉬를 이용해 생성하는 방식
5버전 : SHA-1 해쉬를 이용해 생성하는 방식
고유성을 완벽하게 보장할 수는 없지만 실제 사용 상에서 중복될 가능성이 거의 없다고 인정되기 때문에 많이 사용되고 있습니다.
Apple에서 사용하는 UUID는 RFC 4122의 버전4 방식으로 생성됩니다.
UIDevice.current.identifierForVendor!.uuidString
Swift
복사
UUID().uuidString
Swift
복사
UUID의 성질
1.
앱을 껐다가 켜도 그대로입니다.
2.
앱의 공급업체가 같은 경우 UUID가 동일합니다.
3.
앱을 삭제해도, 공급업체가 같은 앱이 남아 있을 경우 UUID는 그대로입니다.
4.
같은 공급업체의 앱을 모두 삭제 후 재설치시 UUID는 달라집니다.

Accessibility

접근성
산업 디자인, 사용자 인터페이스 디자인, 건축, 시스템 공학, 인간공학 등의 분야에서 쓰이는 용어로, 사용자의 신체적 특성이나, 지역, 성별, 나이, 지식 수준, 기술, 체험과 같은 제한 사항을 고려하여 가능한 많은 사용자가 불편없이 이용할 수 있도록 제품, 서비스를 만들어 제공하고 이를 평가할 때 쓰이는 말이다. 접근성이 높다는 것은 이러한 제한 사항을 가진 사용자도 불편없이 사용할 수 있다는 것을 뜻하며 접근성이 낮다는 것은 어떠한 제한 때문에 사용하기 불편하거나 사용할 수 없을 때를 말한다.
우리에게 손쉬운 사용으로 알려져 있는 기능들이 접근성을 높이기 위한 기능들입니다. 비장애인에게는 화면이 보이므로 원하는 정보를 받을 수 있지만, 장애인에게는 정보를 제공하기가 어렵습니다. 따라서 VoiceOver를 이용해서 접근성을 제공합니다.

VoiceOver

isAccessibilityElement
접근성 요소 여부이며, UIKit Control은 기본 값이 true입니다. 값을 true로 설정하면 해당 요소에 초점이 이동 가능합니다.
accessibilityLabel
레이블을 설정하면 설정한 텍스트를 읽어줍니다. 만약 해당 요소가 버튼인 경우, 설정한 이름 뒤에 버튼이라고 읽어줍니다.
accessibilityHint
요소를 동작시키기 위한 방법을 안내합니다. 해당 인터페이스를 사용해본적이 없어서 어떻게 사용하는게 좋은지에 대한 설명 부여. ** 사용자가 끌 수 있기 때문에 중요한 정보는 담으면 안됨.
accessibilityValue
값이 달라지는 경우에 사용하며, 슬라이더의 값이나 텍스트 필드의 값에 사용할 수 있습니다. 예를 들어, Label은 “볼륨”으로 설정하고, “60%”로 value를 설정합니다.
accessibilityTraits
모든 접근성 특성의 조합을 반환합니다. 아무런 특성을 가지지 않는 UIAccessibilityTraitNone을 설정하거나 버튼으로 다루는 요소라면 UIAccessibilityTraitButton로 설정할 수 있습니다.
accessibilityFrame
스크린 내의 초점의 frame을 설정할 수 있습니다.
shouldGroupAccessibilityChildren
그룹화된 뷰의 요소에 초점을 이동하도록 합니다. 이 속성은 초점이 왼쪽 상단에서 오른쪽 하단으로 이동하므로, 정보가 수직으로 나열되어 있을 때 유용합니다. 디자인에 따라 sholdGroupAccessibilityChildren을 설정하여 접근성을 좀 더 쉽게 설정할 수 있습니다.
accessibilityElementHidden
모든 접근성 요소를 숨겨 초점이 해당 요소로 이동하지 못하게 합니다.
accessibilityViewIsModal
해당 접근성 요소가 Modal 뷰인지 설정하여, 해당 요소로 초점이 이동되면 해당 뷰 내에 접근성 요소로만 이동이 가능하며, 다른 요소로 이동할 수 없습니다.
accessibilityElementDidBecomeFocused()
해당 접근성 요소에 초점을 설정하도록 합니다.
accessibilityElementDidLoseFocus()
해당 접근성 요소에서 가상의 초점을 제거하도록 합니다.
accessibilityElementIsFocused()
해당 접근성 요소에 초점이 걸려있는지 반환합니다.
accessibilityActivate
해당 접근성 요소가 활성화되었었는지 반환합니다.
UIAccessibilityPostNotification
변경사항 등이 있을 때, Notification을 통해 알립니다.
isVoiceOverRunning
VoiceOver가 켜져있는지 여부를 반환합니다.

Color

색맹의 경우 Color로 의미를 구분하기 어려울 수 있으므로 모양까지 다르게 하는 것을 고려

Transparency and Contrast

시력에 문제 있는 사람에게 투명도 줄이기 / 대비 증가 설정은 훨씬 더 가독성을 높게 만듦
투명도 줄이기
UIAccessibility.isReduceTransparencyEnabled로 설정 여부 체크 가능
대비 증가
UIAccessibility.isDarkerSystemColorsEnabled로 설정 여부 체크 가능

Motion

전정기관에 문제 있는 사람들은 화면에 나타나는 motion이 클 경우에 문제가 될 수 있음
UIAccessibility.isReduceMotionEnabled로 설정 여부 확인 후에 부드럽게 전환하는 처리

Dynamic Type

시력 문제로 큰 글씨를 선호하는 사람들이 있음
label.font = UIFont.preferredFont(forTextStyle: .body) 이런식으로 preferredFont 함수 사용
label에 adjustsFontForContentSizeCategory = true로 설정해줘야 유저가 설정을 바꿀때마다 폰트 사이즈가 자동으로 변경된다.
preferredContentSizeCategory 속성 접근해서 사용자가 선호하는 글꼴 사이즈 옵션을 가져올 수도 있다고 합니다.
유동적 글자크기를 위해서 커스텀 폰트를 조정하는 일을 쉽게 하기 위해서 Apple은 iOS 11에서 UIFontMetrics를 제공