leegyoungmin / ExpositionUniverselle

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

๐Ÿ“š ์ œ๋ชฉ

๋งŒ๊ตญ ๋ฐ•๋žŒํšŒ

๐Ÿ“– ์†Œ๊ฐœ

1900๋…„ ํŒŒ๋ฆฌ์—์„œ ์ง„ํ–‰๋˜์—ˆ๋˜ ์—‘์Šคํฌ์˜ ํ•œ๊ตญ ์ถœํ’ˆ์ž‘์„ ํ…Œ์ด๋ธ” ๋ทฐ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ์•ฑ ์ž…๋‹ˆ๋‹ค.


ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉฐ ์‚ฌ์šฉํ•ด๋ณธ ๊ฒƒ

  • TDD
  • ScrollView
  • AutoLayout
  • TableView
  • JSONDecoding
  • Dynamic Type

๐Ÿง‘๐Ÿปโ€๐Ÿ’ป ํŒ€์›

๋ฏธ๋‹ˆ ์ œ์ดํ‘ธ์‹œ

์‹œ๊ฐํ™”๋œ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ(๋‹ค์ด์–ด๊ทธ๋žจ ๋“ฑ)

UML

โฐ ํƒ€์ž„๋ผ์ธ: ํ”„๋กœ์ ํŠธ์˜ ์ฃผ์š” ์ง„ํ–‰ ์ฒ™๋„

STEP1

  • 10์›” 18์ผ
    • ํ”„๋กœ์ ํŠธ ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„
    • Assets ํŒŒ์ผ ์ถ”๊ฐ€
    • JSON ํŒŒ์‹ฑ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ
    • Exposition, Item ํƒ€์ž… ์ƒ์„ฑ

STEP2

  • 10์›” 20์ผ
    • ํฌ์Šคํ„ฐ ํ™”๋ฉด ์š”์†Œ ์ƒ์„ฑ
    • ์Šคํฌ๋กค ๋ทฐ๋ฅผ ์ œ์™ธํ•œ ํฌ์Šคํ„ฐ ๋ทฐ ์˜คํ† ๋ ˆ์ด์•„์›ƒ ์„ค์ •
  • 10์›” 21์ผ
    • UIScrollView ์ถ”๊ฐ€ ๋ฐ ํฌ์Šคํ„ฐ UI ์š”์†Œ ๋ฆฌํŒฉํ„ฐ๋ง
    • Json ๋””์ฝ”๋”ฉ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€ ๋ฐ ๋ทฐ์— ๋ฐ์ดํ„ฐ ์„ค์ •
  • 10์›” 24์ผ
    • ์ถœํ’ˆ์ž‘ ํ™”๋ฉด์œผ๋กœ push ๋ฉ”์„œ๋“œ ์„ค์ •
    • ์ถœํ’ˆ์ž‘ ํ™”๋ฉด ์ƒ์„ฑ ๋ฐ push
    • customTableCell ์ƒ์„ฑ
    • JSON Decoding
  • 10์›” 25์ผ
    • ์ถœํ’ˆ์ž‘ ํ™”๋ฉด์˜ ์˜คํ† ๋ ˆ์ด์•„์›ƒ ์„ค์ •
    • ์ถœํ’ˆ์ž‘ ๋””ํ…Œ์ผ์„ค๋ช…
  • 10์›” 26์ผ
    • ๋ชจ๋ธ ํƒ€์ž… ๋ณ€์ˆ˜๋ช… ์ˆ˜์ •
    • ๋ทฐ ์—…๋ฐ์ดํŠธ ๊ด€๋ จ ๋ฉ”์„œ๋“œ ์ˆ˜์ •

STEP3

  • 10์›” 27์ผ
    • ํ™”๋ฉด Orientation ๊ตฌํ˜„
    • Font ๋‹ค์ด๋‚˜๋ฏน ํƒ€์ž… ๊ตฌํ˜„
  • 10์›” 28์ผ
    • ์ปจ๋ฒค์…˜ ์ •๋ฆฌ
    • ์ƒ์† ๋ถˆ๊ฐ€ ํด๋ž˜์Šค ์ˆ˜์ •

๐Ÿ–ฅ ์‹คํ–‰ ํ™”๋ฉด(๊ธฐ๋Šฅ ์„ค๋ช…)

์ „์ฒด ์‹คํ–‰ํ™”๋ฉด

์ฒซ ํ™”๋ฉด ์ œ์™ธ, portrait, landscape ์„ค์ •

๐Ÿ”ฅ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

์Šคํฌ๋กค๋ทฐ์— View๋ฅผ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ ์Šคํฌ๋กค์ด ๋˜์ง€ ์•Š์•˜๋˜ ๋ฌธ์ œ

ํ•ด๊ฒฐ ์ „ trouble1_unsolved

ํ•ด๊ฒฐ ํ›„ trouble1_solved

UIScrollView๋Š” ContentLayout์ด๋ผ๋Š” ๋ทฐ์™€ ๋‚ด๋ถ€์˜ ์š”์†Œ๋“ค์˜ ๋ทฐ์˜ ๋†’์ด๋‚˜ ํญ์ด ๋™์ผํ•˜์—ฌ์•ผ๋งŒ ์Šคํฌ๋กค์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋‚ด๋ถ€ ์š”์†Œ๋“ค์˜ width๊ฐ€ scrollView์˜ ContentLayout์˜ width์™€ ๋™์ผํ•˜์ง€ ์•Š์•„์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œcontainerView๋ฅผ ๋งŒ๋“ค์–ด์„œ ์š”์†Œ๋“ค์„ ๋„ฃ์€ ๋‹ค์Œ containerView์™€ scrollView์˜ width๋ฅผ ๋งž์ท„์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€ ์˜คํ† ๋ ˆ์ด์•„์›ƒ ์„ค์ • ์‹œ ํฌ๊ธฐ ์กฐ์ ˆ์ด ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ

ํ•ด๊ฒฐ ์ „ ํ•ด๊ฒฐ ํ›„

CustomView๋กœ ๊ตฌ์„ฑํ•œ ๋ฒ„ํŠผ์˜ heightAnchor๊ฐ€ 0์ด ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋Š” UIView ํด๋ž˜์Šค๊ฐ€ Instric Content Size๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ปจํ…์ธ ์˜ ๋ณธ์งˆ์ ์ธ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ง์ ‘์ ์œผ๋กœ ์„ค์ • ํ•˜์ง€ ์•Š๋Š” ์ด์ƒ, ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ €ํฌ์˜ ๋ฌธ์ œ๋Š” heigh๊ฐ’์ด ์ •ํ•ด์ง€์ง€ ์•Š์€ ์ƒํ™ฉ์—์„œ ์œ„์˜ ๋ทฐ์˜ Constraint๋ฅผ ์ ์šฉํ•˜์—ฌ๋„, UIView์˜ height ๊ฐ’์ด 0์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜๋„์™€ ๋‹ค๋ฅด๊ฒŒ ๋ทฐ์˜ Constraint๊ฐ€ ์„ค์ •๋˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ UIVIew์˜ heightํฌ๊ธฐ๋ฅผ ์ด๋ฏธ์ง€ํฌ๊ธฐ์˜ height์™€ ๋™์ผํ•˜๊ฒŒ ์„ค์ •ํ•˜์—ฌ Instrict Content Size๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

์…€์˜ ๋†’์ด๋ฅผ Dynamicํ•˜๊ฒŒ ์กฐ์ ˆํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ

ํ•ด๊ฒฐ ์ „ ํ•ด๊ฒฐ ํ›„
trouble2_unsolved trouble2_solved

ํ…Œ์ด๋ธ” ๋ทฐ์˜ ์ปค์Šคํ…€ ์…€์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์—์„œ TableView์˜ ๋‹ค์ด๋‚˜๋ฏน Height๋ฅผ ์ฃผ๋Š” ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” 2๊ฐœ์˜ ๋ทฐ๋ฅผ ํ†ตํ•ด์„œ ๋†’์ด๋ฅผ ์ง์ ‘์ ์œผ๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ฉด, ์ž๋™์ ์œผ๋กœ ๋Š˜์–ด๋‚  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, 2๊ฐœ์˜ ๋ทฐ๋ฅผ ํ†ตํ•ด์„œ ๋†’์ด๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์€ ์ด๋ฏธ์ง€์˜ height๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ณผ์ •์—์„œ contentView์˜ ๋†’์ด๊ฐ€ ๋ชจํ˜ธํ•ด์ง€๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋‚ณ๊ฒŒ ๋˜์—ˆ๊ณ , ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ automaticDemention๊ณผ estimatedHeightForRowAt ๋ฅผ ์ด์šฉํ•˜๋ ค๊ณ  ํ•˜์˜€์ง€๋งŒ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ๋ฌธ์ œ๋Š” ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ๋†’์ด๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ์ œ์•ฝ๊ณผ title๊ณผ subTitle์˜ ๋†’์ด๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ณผ์ •์—์„œ ์ถฉ๋Œํ•˜๋Š” ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ title, subtitle์ด ์ค‘์•™ ์ •๋ ฌ์ด ๋˜์ง€ ์•Š๊ณ  top์œผ๋กœ ๋ถ™๊ฒŒ ๋˜๊ฑฐ๋‚˜ bottom์œผ๋กœ ๋ถ™๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ •ํ™•ํ•˜๊ฒŒ Instrict Size๋ฅผ ์ž๋™์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜๋Š” StackView๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋†’์ด๋ฅผ ์ž๋™์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜๊ณ , Top๊ณผ Bottom์˜ ์ œ์•ฝ์‚ฌํ•ญ์„ ํ†ตํ•ด์„œ ๋ทฐ์˜ ์…€์˜ ๋†’์ด๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€๊ณ , greater์™€ less ์ œ์•ฝ์‚ฌํ•ญ๊ณผ centerYanchor๋ฅผ ํ†ตํ•ด์„œ ์ค‘์•™ ์ •๋ ฌ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๐Ÿค” ํšŒ๊ณ 

  • ๊ฐœ์ธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ถ”๊ฐ€ ์˜ˆ์ •

๐Ÿ”— ์ฐธ๊ณ  ๋งํฌ

JSONDecoder TableView Accessibility Inspector (WWDC 2019)

About


Languages

Language:Swift 100.0%