[Views] Creating a card view

rrudalstjΒ·2024λ…„ 7μ›” 17일
0

Apple App Dev Tutorials

λͺ©λ‘ 보기
3/5
post-thumbnail

πŸ”Ž 이 글은 Apple Developer Documentation - SwiftUI App Dev Tutorialsλ₯Ό ChatGPTλ₯Ό 톡해 λ²ˆμ—­ν•˜μ—¬ μž‘μ„±λ˜μ—ˆμŒμ„ μ•Œλ €λ“œλ¦½λ‹ˆλ‹€.


ScrumdingerλŠ” μ‚¬μš©μžκ°€ μ°Έμ„ν•˜λŠ” 일일 슀크럼 λͺ©λ‘μ„ μœ μ§€ν•˜λ©°, 이 λͺ©λ‘μ„ 루트 뷰에 ν‘œμ‹œν•©λ‹ˆλ‹€.

이 νŠœν† λ¦¬μ–Όμ—μ„œλŠ” 일일 슀크럼 μš”μ•½μ„ ν‘œμ‹œν•˜λŠ” CardViewλ₯Ό λ§Œλ“€ κ²ƒμž…λ‹ˆλ‹€. λ‹€μŒ νŠœν† λ¦¬μ–Όμ—μ„œλŠ” List λ·°λ₯Ό λ§Œλ“€μ–΄ 각 행에 이 CardViewλ₯Ό μ‚¬μš©ν•˜λŠ” 방법을 배울 κ²ƒμž…λ‹ˆλ‹€.

Section 1. Create a color theme

Step 1.

ν”„λ‘œμ νŠΈ λ‚΄λΉ„κ²Œμ΄ν„°μ—μ„œ μƒˆλ‘œμš΄ 그룹을 μƒμ„±ν•˜κ³  이름을 Models둜 μ„€μ •ν•©λ‹ˆλ‹€.

Step 2.

Models κ·Έλ£Ή μ•ˆμ— μƒˆλ‘œμš΄ Swift νŒŒμΌμ„ μƒμ„±ν•˜κ³  이름을 Theme.swift둜 μ„€μ •ν•©λ‹ˆλ‹€.

Step 3.

Foundation ν”„λ ˆμž„μ›Œν¬ λŒ€μ‹  SwiftUI ν”„λ ˆμž„μ›Œν¬λ₯Ό μž„ν¬νŠΈν•©λ‹ˆλ‹€.

이 μ„Ήμ…˜μ—μ„œλŠ” λ·°λ₯Ό μƒμ„±ν•˜μ§€ μ•Šμ§€λ§Œ, SwiftUI ν”„λ ˆμž„μ›Œν¬μ—μ„œ Color 속성을 μΆ”κ°€ν•©λ‹ˆλ‹€. SwiftUIλŠ” 색상을 λ·° μΈμŠ€ν„΄μŠ€λ‘œ μ·¨κΈ‰ν•˜λ―€λ‘œ λ·° 계측에 직접 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Step 4.

String νƒ€μž…μ˜ μ›μ‹œ 값을 κ°–λŠ” ThemeλΌλŠ” μ΄λ¦„μ˜ μ—΄κ±°ν˜•μ„ λ§Œλ“­λ‹ˆλ‹€.

SwiftλŠ” Theme에 μΆ”κ°€ν•˜λŠ” 각 μΌ€μ΄μŠ€ 이름과 μΌμΉ˜ν•˜λŠ” λ¬Έμžμ—΄μ„ μžλ™μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.

μ»΄νŒŒμΌλŸ¬λŠ” μ—΄κ±°ν˜•μ΄ μ›μ‹œ νƒ€μž…μ„ μ„ μ–Έν•˜λ €λ©΄ μΌ€μ΄μŠ€λ₯Ό κ°€μ Έμ•Ό ν•˜κΈ° λ•Œλ¬Έμ— 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€.

Step 5.

μŠ€νƒ€ν„° ν”„λ‘œμ νŠΈμ—λŠ” 에셋 μΉ΄νƒˆλ‘œκ·Έκ°€ ν¬ν•¨λ˜μ–΄ 있으며, 각 색상에 λŒ€ν•œ RGBA 값이 μ •μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

에셋 μΉ΄νƒˆλ‘œκ·Έμ˜ Themes 폴더에 λ‚˜μ—΄λœ 각 색상에 λŒ€ν•œ μΌ€μ΄μŠ€λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

에셋 μΉ΄νƒˆλ‘œκ·Έμ—μ„œ λͺ…λͺ…λœ 색상은 μ½”λ“œμ—μ„œ μ°Έμ‘°λ˜λŠ” 이름과 μΌμΉ˜ν•΄μ•Ό ν•˜λ―€λ‘œ, 각 μΌ€μ΄μŠ€λ₯Ό μ •ν™•ν•˜κ²Œ μž…λ ₯ν•˜μ„Έμš”.

Step 6.

self의 값에 따라 .black λ˜λŠ” .whiteλ₯Ό λ°˜ν™˜ν•˜λŠ” accentColorλΌλŠ” μ΄λ¦„μ˜ Color 속성을 μΆ”κ°€ν•©λ‹ˆλ‹€.

accentColorλŠ” ν…Œλ§ˆμ˜ μ£Όμš” 색상과 높은 λŒ€λΉ„λ₯Ό μ œκ³΅ν•˜μ—¬ λ·°κ°€ 접근성을 μœ μ§€ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

Step 7.

μ—΄κ±°ν˜•μ˜ μ›μ‹œ 값을 μ‚¬μš©ν•˜μ—¬ 색상을 μƒμ„±ν•˜λŠ” mainColorλΌλŠ” μ΄λ¦„μ˜ Color 속성을 μΆ”κ°€ν•©λ‹ˆλ‹€.

이 속성은 에셋 μΉ΄νƒˆλ‘œκ·Έμ—μ„œ 색상을 μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.

Section 2. Create a daily scrum model

DailyScrum λͺ¨λΈμ€ λ‹€μŒ λ„€ κ°€μ§€ 속성을 ν¬ν•¨ν•©λ‹ˆλ‹€: title, attendees, lengthInMinutes, 그리고 theme. 이 속성듀은 λͺ¨λ‘ κ°„λ‹¨ν•œ κ°’ νƒ€μž…μ„ κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. DailyScrum은 데이터 값을 주둜 ν¬ν•¨ν•˜λ―€λ‘œ, 이λ₯Ό struct둜 μ„ μ–Έν•˜μ—¬ κ°’ νƒ€μž…μœΌλ‘œ λ§Œλ“€ κ²ƒμž…λ‹ˆλ‹€.

Step 1.

Models 그룹에 DailyScrumμ΄λΌλŠ” μ΄λ¦„μ˜ μƒˆ Swift νŒŒμΌμ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

Step 2.

title, attendees, lengthInMinutes, 및 theme 속성을 κ°€μ§„ DailyScrum ꡬ쑰체λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

Step 3.

μƒ˜ν”Œ 데이터λ₯Ό μ œκ³΅ν•˜λŠ” ν™•μž₯을 μΆ”κ°€ν•©λ‹ˆλ‹€.

Section 3. Create the card view

CardViewλŠ” DailyScrum λͺ¨λΈ 데이터λ₯Ό μš”μ•½ν•˜μ—¬ 제λͺ©, μ°Έκ°€μž 수, 그리고 지속 μ‹œκ°„μ„ ν‘œμ‹œν•©λ‹ˆλ‹€. CardViewλŠ” DailyScrum ꡬ쑰체의 데이터λ₯Ό μ‘°κ°λ³„λ‘œ ν‘œμ‹œν•˜λŠ” 더 μž‘μ€ λ·°λ“€λ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.

λ·°λ₯Ό κ°œλ°œν•˜λ©΄μ„œ 즉각적인 μ‹œκ°μ  ν”Όλ“œλ°±μ„ 받을 수 μžˆλ„λ‘ CardView_Previews ꡬ쑰체λ₯Ό μ—…λ°μ΄νŠΈν•  κ²ƒμž…λ‹ˆλ‹€.

Step 1.

CardViewλΌλŠ” μ΄λ¦„μ˜ μƒˆ SwiftUI λ·° νŒŒμΌμ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

프리뷰가 μΌμ‹œ μ€‘μ§€λœ 경우, μ½”λ“œλ₯Ό λ³€κ²½ν•  λ•Œ ν”„λ¦¬λ·°μ—μ„œ λ³€κ²½ 사항을 확인할 수 μžˆλ„λ‘ 프리뷰λ₯Ό λ‹€μ‹œ μ‹œμž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Step 2.

DailyScrum νƒ€μž…μ˜ scrumμ΄λΌλŠ” μƒμˆ˜λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

μ»΄νŒŒμΌλŸ¬λŠ” CardView() μ΄ˆκΈ°ν™”μžκ°€ 이제 DailyScrum λ§€κ°œλ³€μˆ˜λ₯Ό μš”κ΅¬ν•˜κΈ° λ•Œλ¬Έμ— 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€.

Step 3.

CardView_Previewsμ—μ„œ scrumμ΄λΌλŠ” μ΄λ¦„μ˜ 정적 λ³€μˆ˜λ₯Ό μƒμ„±ν•˜κ³ , 이λ₯Ό CardView μ΄ˆκΈ°ν™”μžμ— μ „λ‹¬ν•©λ‹ˆλ‹€.

Step 4.

scum.theme.mainColorλ₯Ό μ‚¬μš©ν•˜μ—¬ ν”„λ¦¬λ·°μ˜ λ°°κ²½ 색상을 μ§€μ •ν•©λ‹ˆλ‹€.

Step 5.

previewLayout μˆ˜μ •μžλ₯Ό μ‚¬μš©ν•˜μ—¬ ν”„λ¦¬λ·°μ˜ λ„ˆλΉ„λ₯Ό 400, 높이λ₯Ό 60으둜 μ„€μ •ν•©λ‹ˆλ‹€.

프리뷰 λ ˆμ΄μ•„μ›ƒκ³Ό λ°°κ²½ 색상을 μ„€μ •ν•˜λ©΄ CardViewκ°€ List λ·° μ•ˆμ—μ„œ μ–΄λ–»κ²Œ λ‚˜νƒ€λ‚ μ§€λ₯Ό 미리 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ νŠœν† λ¦¬μ–Όμ—μ„œλŠ” List μ•ˆμ— 이 λ·°λ₯Ό 포함할 κ²ƒμž…λ‹ˆλ‹€.

Step 6.

μΊ”λ²„μŠ€ 섀정을 Liveμ—μ„œ Selectable둜 λ³€κ²½ν•©λ‹ˆλ‹€.

Step 7.

Text λ·°λ₯Ό μ—…λ°μ΄νŠΈν•˜μ—¬ scrum의 제λͺ©μ„ ν‘œμ‹œν•˜κ³ , κΈ€κΌ΄ μŠ€νƒ€μΌμ„ headline으둜 μ„€μ •ν•©λ‹ˆλ‹€.

Step 8.

Text λ·°λ₯Ό VStack μ•ˆμ— μ‚½μž…ν•˜κ³ , leading 정렬을 μ„€μ •ν•©λ‹ˆλ‹€.

VStack은 μžμ‹ λ·°λ₯Ό 수직으둜 λ°°μ—΄ν•˜λ©°, λ·°λ₯Ό μˆ˜ν‰ 좕에 맞좰 λ°°μΉ˜ν•˜κΈ° μœ„ν•΄ μ •λ ¬ 인자λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

Step 9.

Spacerλ₯Ό μΆ”κ°€ν•˜κ³ , μ°Έμ„μž 수λ₯Ό ν‘œμ‹œν•˜λŠ” Label을 ν¬ν•¨ν•˜λŠ” HStack을 μΆ”κ°€ν•©λ‹ˆλ‹€.

Labelκ³Ό ImageλŠ” SF Symbol에 μ•½κ°„ λ‹€λ₯Έ λ§€κ°œλ³€μˆ˜ λ ˆμ΄λΈ”μ„ μ‚¬μš©ν•©λ‹ˆλ‹€. λ·°λ₯Ό μ •λ ¬ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œ ImageλŠ” Image(systemName:_)을 μ‚¬μš©ν•˜λŠ” 반면, Label(_:systemImage:)을 μ‚¬μš©ν•©λ‹ˆλ‹€.

Step 10.

HStack에 또 λ‹€λ₯Έ Label을 μΆ”κ°€ν•˜κ³ , κ·Έ μ‹œμŠ€ν…œ 이미지λ₯Ό "clock"으둜 μ„€μ •ν•©λ‹ˆλ‹€.

Step 11.

라벨을 μˆ˜μ •ν•˜μ—¬ 회의 길이λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

λ·°λŠ” 속성 검사기λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μž μ •μ˜ν•  수 있으며, μ½”λ“œκ°€ 이에 따라 μ—…λ°μ΄νŠΈλ©λ‹ˆλ‹€. λ˜λŠ” μ½”λ“œλ₯Ό 직접 λ³€κ²½ν•˜μ—¬ 속성을 μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 두 경우 λͺ¨λ‘, ν”„λ¦¬λ·°λŠ” λ³€κ²½ 사항을 λ°˜μ˜ν•˜μ—¬ μ—…λ°μ΄νŠΈλ©λ‹ˆλ‹€.

Step 12.

λ ˆμ΄λΈ” 사이에 Spacerλ₯Ό μΆ”κ°€ν•˜μ—¬ 정보λ₯Ό 뷰의 κ°€μž₯자리 μ£Όμœ„μ— λ°°μΉ˜ν•©λ‹ˆλ‹€.

Section 4. Stylize the card

μΉ΄λ“œ λ·°λŠ” 일일 μŠ€ν¬λŸΌμ— λŒ€ν•œ 정보λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€. 이 μ„Ήμ…˜μ—μ„œλŠ” κ°€μž₯ μ€‘μš”ν•œ 정보λ₯Ό κ°•μ‘°ν•˜κΈ° μœ„ν•΄ μΉ΄λ“œλ₯Ό μŠ€νƒ€μΌλ§ν•˜κ³ , ν…μŠ€νŠΈμ™€ λ°°κ²½ λ·° μ‚¬μ΄μ˜ μΆ©λΆ„ν•œ λŒ€λΉ„λ₯Ό 보μž₯ν•˜κΈ° μœ„ν•΄ μ‹œκ°μ  ꡬ성 μš”μ†Œλ₯Ό μˆ˜μ •ν•  κ²ƒμž…λ‹ˆλ‹€. 이 μž‘μ—…μ€ 밝은 λͺ¨λ“œμ™€ μ–΄λ‘μš΄ λͺ¨λ“œμ—μ„œ λͺ¨λ‘ μ μš©λ©λ‹ˆλ‹€.

Step 1.

회의 길이 라벨에 20 포인트의 였λ₯Έμͺ½ νŒ¨λ”©μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

뷰의 .leading, .top, 및 .bottom κ°€μž₯μžλ¦¬μ—λ„ νŒ¨λ”©μ„ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Step 2.

HStack μ•ˆμ— μžˆλŠ” λͺ¨λ“  폰트λ₯Ό μΊ‘μ…˜ μŠ€νƒ€μΌλ‘œ μ„€μ •ν•©λ‹ˆλ‹€.

λ ˆμ΄λΈ”κ³Ό μ΄λ―Έμ§€μ—μ„œ μ‚¬μš©λ˜λŠ” SF SymbolsλŠ” 폰트의 λ‘κ»˜μ™€ 크기 변화에 따라 μ μ ˆν•˜κ²Œ 크기가 μ‘°μ •λ˜κ³  μ •λ ¬λ©λ‹ˆλ‹€.

Step 3.

VStack에 νŒ¨λ”©μ„ μΆ”κ°€ν•˜μ—¬ λͺ¨λ“  μ½˜ν…μΈ λ₯Ό κ°€μž₯μžλ¦¬μ—μ„œ 멀리 μ΄λ™μ‹œν‚΅λ‹ˆλ‹€.

Step 4.

Xcode의 프리뷰 λͺ¨λ“œλ₯Ό Selectableμ—μ„œ Color Scheme Variants둜 λ³€κ²½ν•˜μ—¬ λ·°λ₯Ό 밝은 λͺ¨λ“œμ™€ μ–΄λ‘μš΄ λͺ¨λ“œμ—μ„œ λ Œλ”λ§ν•©λ‹ˆλ‹€.

기본적인 밝은 ν…μŠ€νŠΈκ°€ μ–΄λ‘μš΄ λͺ¨λ“œμ—μ„œ λ…Έλž€μƒ‰ λ°°κ²½κ³Ό μΆ©λΆ„ν•œ λŒ€λΉ„λ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Step 5.

scrum.theme.accentColorλ₯Ό μ‚¬μš©ν•˜μ—¬ foregroundColorλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.

Theme.swiftμ—μ„œ μ •μ˜λœ accentColor λ³€μˆ˜λŠ” 밝은 μƒ‰μƒμ˜ ν…Œλ§ˆμ—λŠ” 검은색을, μ–΄λ‘μš΄ μƒ‰μƒμ˜ ν…Œλ§ˆμ—λŠ” 흰색을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

foregroundColor λŠ” 주둜 text color λ₯Ό λ³€κ²½ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

Section 5. Customize the label style

λ‹€μŒμœΌλ‘œ, 슀크럼 길이와 μ‹œκ³„ μ•„μ΄μ½˜μ„ κ°€λ‘œλ‘œ μŒ“κΈ° μœ„ν•œ 라벨 μŠ€νƒ€μΌμ„ 생성할 κ²ƒμž…λ‹ˆλ‹€. LabelStyle ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ λ·°μ—μ„œ λ™μΌν•œ 라벨 μŠ€νƒ€μΌμ„ μž¬μ‚¬μš©ν•˜μ—¬ μ•± μ „λ°˜μ— μΌκ΄€λœ λ””μžμΈμ„ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

Step 1.

TrailingIconLabelStyle.swiftλΌλŠ” μ΄λ¦„μ˜ μƒˆ Swift νŒŒμΌμ„ μƒμ„±ν•©λ‹ˆλ‹€.

Step 2.

SwiftUIλ₯Ό μž„ν¬νŠΈν•©λ‹ˆλ‹€.

Step 3.

LabelStyle을 μ€€μˆ˜ν•˜λŠ” TrailingIconLabelStyleμ΄λΌλŠ” μƒˆλ‘œμš΄ ꡬ쑰체λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

λ§Œμ•½ μ‚¬μš©μž μ •μ˜ 라벨 μŠ€νƒ€μΌμ„ λ§Œλ“€κ³  μ‹Άμ§€ μ•Šλ‹€λ©΄, μ‹œμŠ€ν…œ ν‘œμ€€ λ ˆμ΄μ•„μ›ƒμ„ μ‚¬μš©ν•˜μ—¬ μ•„μ΄μ½˜κ³Ό 제λͺ©μ„ λͺ¨λ‘ ν‘œμ‹œν•˜λŠ” λ‚΄μž₯된 라벨 μŠ€νƒ€μΌ 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Step 4.

빈 makeBody(configuration:) ν•¨μˆ˜λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

μ‹œμŠ€ν…œμ€ 이 μŠ€νƒ€μΌμ΄ ν˜„μž¬ 라벨 μŠ€νƒ€μΌμΈ λ·° κ³„μΈ΅μ˜ 각 Label μΈμŠ€ν„΄μŠ€μ— λŒ€ν•΄ 이 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.

Step 5.

HStack을 μΆ”κ°€ν•©λ‹ˆλ‹€.

Step 6.

HStack μ•ˆμ— configuration.titleκ³Ό configuration.icon을 μΆ”κ°€ν•©λ‹ˆλ‹€.

configuration λ§€κ°œλ³€μˆ˜λŠ” LabelStyleConfiguration으둜, 이 κ°μ²΄λŠ” μ•„μ΄μ½˜κ³Ό 제λͺ© λ·°λ₯Ό ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이 뷰듀은 라벨의 이미지와 ν…μŠ€νŠΈλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

Step 7.

LabelStyle에 trailingIconμ΄λΌλŠ” μ΄λ¦„μ˜ 정적 속성을 μƒμ„±ν•˜λŠ” ν™•μž₯을 μΆ”κ°€ν•©λ‹ˆλ‹€.
정적 μ†μ„±μœΌλ‘œ 라벨 μŠ€νƒ€μΌμ„ μ •μ˜ν–ˆκΈ° λ•Œλ¬Έμ—, 이λ₯Ό 점 ν‘œκΈ°λ²•(leading-dot syntax)을 μ‚¬μš©ν•˜μ—¬ ν˜ΈμΆœν•  수 μžˆμ–΄ μ½”λ“œκ°€ 더 읽기 μ‰¬μ›Œμ§‘λ‹ˆλ‹€.

Step 8.

CardView.swift νŒŒμΌμ—μ„œ lengthInMinutes 라벨에 μžˆλŠ” νŒ¨λ”©μ„ μƒˆλ‘œμš΄ 라벨 μŠ€νƒ€μΌλ‘œ λ°”κΏ‰λ‹ˆλ‹€.

이제 μ‹œκ³„ μ•„μ΄μ½˜μ΄ κ°€μž₯μžλ¦¬μ— μ •λ ¬λ˜μ–΄ μ°Έμ„μž 수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ„ ν–‰ 라벨과 λŒ€μΉ­μœΌλ‘œ λ°°μΉ˜λ©λ‹ˆλ‹€.

Section 6. Make the card view accessible

이제 CardViewκ°€ μ‹œκ°μ μœΌλ‘œ λ°°μΉ˜λ˜μ—ˆμœΌλ―€λ‘œ, λͺ¨λ“  μ‚¬μš©μžκ°€ μ ‘κ·Όν•  수 μžˆλ„λ‘ κ°œμ„ ν•  μ°¨λ‘€μž…λ‹ˆλ‹€. μ ‘κ·Όμ„± μˆ˜μ •μžλ₯Ό 뷰에 μΆ”κ°€ν•˜μ—¬ VoiceOverλ₯Ό 톡해 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ΄ν•΄ν•˜κ³  νƒμƒ‰ν•˜λŠ” 것을 더 μ‰½κ²Œ λ§Œλ“€μ–΄ 쀄 κ²ƒμž…λ‹ˆλ‹€.

CardViewμ—λŠ” 회의 길이λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ‹œκ³„ 이미지와 μˆ«μžκ°€ ν¬ν•¨λœ 라벨과 μ°Έμ„μž 수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ‚¬λžŒ 이미지와 μˆ«μžκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

λ¬Έμžμ—΄ 보간법을 μ‚¬μš©ν•˜λŠ” μ ‘κ·Όμ„± 라벨을 μΆ”κ°€ν•˜μ—¬ 라벨이 뷰에 λŒ€ν•œ 의미 μžˆλŠ” μ„€λͺ…이 λ˜λ„λ‘ ν•  κ²ƒμž…λ‹ˆλ‹€. VoiceOverλŠ” "4 attendees"와 "10 minute meeting"이라고 μ½μ–΄μ€λ‹ˆλ‹€.

Step 1.

슀크럼의 제λͺ©μ„ ν‘œμ‹œν•˜λŠ” ν…μŠ€νŠΈ 뷰에 accessibilityAddTraits(.isHeader) μˆ˜μ •μžλ₯Ό μ μš©ν•©λ‹ˆλ‹€.

이 μˆ˜μ •μžλŠ” 뷰의 정보 ꡬ쑰λ₯Ό μ „λ‹¬ν•˜λŠ” 데 도움을 μ£Όλ©°, 슀크럼 제λͺ© 뒀에 β€œheading”이 μ½νžˆλ„λ‘ ν•©λ‹ˆλ‹€.

Step 2.

첫 번째 Label의 λ‚΄μš©μ„ μ„€λͺ…ν•˜λŠ” 라벨을 μΆ”κ°€ν•˜κΈ° μœ„ν•΄ μ ‘κ·Όμ„± μˆ˜μ •μžλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

Step 3.

두 번째 Label에도 μœ μ‚¬ν•œ μ ‘κ·Όμ„± μˆ˜μ •μžλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

λ‹€μŒ νŠœν† λ¦¬μ–Όμ—μ„œλŠ” CardViewλ₯Ό SwiftUI List λ‚΄μ—μ„œ μ‚¬μš©ν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€. SwiftUIκ°€ μ–΄λ–»κ²Œ 방금 λ§Œλ“  것과 같은 μž‘μ€ 뷰듀을 μ‘°ν•©ν•˜μ—¬ 큰 λ³΅μž‘ν•œ λ·°λ₯Ό μ‰½κ²Œ ꡬ성할 수 μžˆλŠ”μ§€λ₯Ό 배울 κ²ƒμž…λ‹ˆλ‹€.

profile
helloooo

0개의 λŒ“κΈ€