Section2. Build groups of views - Step3
ProgressView(value: 5, total: 15)
ProgressView는 작업완료에 대한 진행 상황을 표시하는 뷰이다. 이니셜라이저로 (value: total:)을 가졌다. 이는 확정된 구체적인 진행 상황을 표시하기 위한 진행률 뷰를 만든다. value 파라미터는 현재 시점까지의 작업의 완료된 양으로, 0.0부터 total까지의 범위를 가진다. total 파라미터는 작업의 전체 범위를 나타내는 양이다. total의 값을 따로 정해주지 않으면, 기본값으로 1.0을 가진다. 그래서 total 값을 따로 설정해주지 않고, value 값을 1이상의 값(예를 들면 5)로 설정하면 항상 진행률이 100%로 나타나게 된다. 그래서 만약 25%정도의 진행률을 나타내고 싶다고 할 때, 나타낼 수 있는 방식은 아래 두 가지다.
ProgressView(value: 0.25)
ProgressView(value: 4, total: 10)
Section2. Build groups of views - Step9
Label("300", systemImage: "hourglass.bottomhalf.fill")
Label은 제목이 있는 아이콘으로 구성된 상표이다. "300"만 필요하면 Text("300")을 해도 되지만, 어떤 아이콘과 함께 사용하고자 할 때 Label을 사용하면 편하다.
Section3. Modify and style views - Step1
Spacer()
Spacer는 Stack 내부에서 멋찐 역할을 한다. Stack의 주축을 따라 간격을 부여하는 역할을 한다. 예를들어 HStack에서 Spacer는 Stack이 허용하는 만큼 수평으로 확장되어 Stack 크기의 한계 내에서 주변 형제 뷰를 방해하지 않도록 유연하게 간격을 부여한다. 이 때 주변 형제 뷰를 방해하지 않도록이라는 의미를 조금 더 이해하기 쉽게 얘기해보자.
VStack {
Text("블라블라")
Spacer()
Text("블라블라")
}
VStack {
Image(아무이미지)
}
둘 중에 위에 있는 VStack의 Text와 Text 사이에 Spacer()를 추가했다. VStack이기 때문에 수직 방향으로 두 Text 사이에 간격을 부여할 거다. 근데 이게 엄청나게 간격을 줘버리면, 화면 내에 배치 되어있던 둘 중에 아래에 있는 VStack이 짤리게 되지않을까? 라는 생각이 들 건데, 이 때 Spacer의 역할이 기여한다. 아래의 VStack이 짤리지 않게, 즉 방해되지 않도록 유연하게 간격을 부여한다는 게 이런 의미이다.
Section3. Modify and style views - Step6
Button(action: {}) {
Image(systemName: "forward.fill")
}
Button은 작업과 레이블을 제공하여 버튼을 만듭니다. 작업은 사용자가 버튼을 클릭하거나 탭할 때 작업을 수행하는 메서드 또는 클로저 속성입니다. 레이블은 버튼의 동작을 설명하는 보기입니다. 예를 들어 텍스트, 아이콘 또는 둘 다를 표시합니다. 위 코드에서 작업(action:)은 아직 빈칸이다. 추후에 여기에 기능을 추가할 예정이라고 한다. 위 코드에서 레이블은 Image로 보기를 만들었다.
Section3. Modify and style views - Step8
.padding()
padding()은 요소의 테두리와 컨텐츠 사이의 전체적으로 안쪽 여백을 지정합니다. Spacer와의 차이는 뭘까?
Section4. Supplement accessibility data
VoiceOver는 사람들이 화면을 보지 않고도 앱의 인터페이스를 경험할 수 있게 해주는 화면 판독기입니다. VoiceOver는 Apple의 Building accessible apps - 접근 가능한 앱 구축의 기능 중 하나이다. Building accessible apps는 간단하게, 내장된 접근성 기능, 접근성 API 및 개발자 도구를 통해서, Apple 운영 체제는 장애인을 포함한 모든 사람에게 고품질 경험을 제공할 수 있는 특별한 기회를 제공합니다. 맹인 및 저시력 사용자를 위한 혁신적인 스크린 리더인 VoiceOver를 활용하여 스위치 제어, 사용법 안내, 텍스트 음성 변환, 자막 또는 오디오 설명이 포함된 동영상 등을 이용할 수 있습니다. 이 때 접근성이라는 게 뭔지 모르겠다.
모바일 앱 접근성이란 스마트폰이나 태블릿PC 등 모바일 기기에서 실행되는 애플리케이션을 이용하고자 하는 장애인, 고령자 등이 비장애인과 동등하게 모바일 기기를 사용하여 애플리케이션을 이용할 수 있도록 보장하는 것을 말한다.
Section4. Supplement accessibility data - Step1 ~ Step4
.accessibilityElement(children: .ignore)
.accessibilityLabel("Time remaining")
.accessibilityValue("10 minutes")
.accessibilityLabel("Next speaker")
.accessibilityElement는 접근성 요소가 접근성 계층에 참여하는지 여부를 결정하는 부울 값입니다. 프로젝트 내의 HStack 내부에 있는 로직들이 장애인, 고령자 등이 비장애인과 동등하게 하더라도 별 차별을 못 느끼는 요소, 즉 불필요한 요소이기 때문에 .ignore로 무시하라고 한다.
.accessibilityLabel는 VoiceOver에게 유의미한 String 값을 전달하도록 한다.
.accessibilityValue는 접근성 요소의 값을 뜻한다. 하위 뷰의 값을 의도적으로 무시(.ignore)했기 때문에 HStack에 값을 추가해야 합니다. 그렇지 않으면 SwiftUI는 하위 보기의 값을 자동으로 유추합니다.
VoiceOver는 기본적으로 systemImage 값을 읽으므로 요소를 설명하는 접근성 레이블을 추가해야 합니다.