Notice
Recent Posts
Recent Comments
Link
๊ด€๋ฆฌ ๋ฉ”๋‰ด

lgvv98

ch17 ๋‚˜์˜ ScrollView Guide! ์ƒํ•˜์ขŒ์šฐ!! ๋ณธ๋ฌธ

โš ๏ธ deprecated โš ๏ธ/ํŒจ์บ (์˜ฌ์ธ์›)

ch17 ๋‚˜์˜ ScrollView Guide! ์ƒํ•˜์ขŒ์šฐ!!

๐Ÿฅ• ์บ๋Ÿฟ๋งจ 2021. 6. 29. 23:59

โœ…  ์ด๋ฒˆ์‹œ๊ฐ„์—๋Š” ์Šคํฌ๋กค ๋ทฐ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

์‚ฌ์‹ค ์˜ˆ์ „์— ์Šคํฌ๋กค ๋ทฐ๋ฅผ ๊ธ‰ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ผ์ด ์žˆ์–ด์„œ ๊ตฌ๊ธ€๋งํ•ด์„œ ์‚ฌ์šฉํ–ˆ๋˜ ์ ์ด ์žˆ๋Š”๋ฐ, ๊ทธ๋•Œ ์ •ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ์„œ ๋‹ค๋ฅธ๊ณณ์— ์ ์šฉํ• ๋•Œ ์•ˆ๋˜์—ˆ๋˜ ๊ธฐ์–ต์ด... ๊ทธ๋Ÿผ ์•„๋ฌดํŠผ ๋‹ค์‹œ ๊ณต๋ถ€ํ•ด๋ณด๋„๋ก ํ• ๊นŒ?

 

(๋“ค์–ด๊ฐ€๊ธฐ ์•ž์„œ...)

๊ฐ•์˜์—์„œ๋Š” Nested ScrollView(๋„ค์Šคํ‹ฐ๋“œ ์Šคํฌ๋กค ๋ทฐ) ๋ผ๋Š” ์šฉ์–ด๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๋„ค์Šคํ‹ฐ๋“œ ์Šคํฌ๋กค ๋ทฐ๋ž€, ์ด์ค‘ ์Šคํฌ๋กค ๋ทฐ๋ผ๋Š” ์˜๋ฏธ๋กœ, ์Šคํฌ๋กค ๋ทฐ์—์„œ ์Šคํฌ๋กค ๋ทฐ๋ฅผ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์Šคํฌ๋กค ๋ทฐ๊ฐ€ ์ฆ‰, 2๊ฐœ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ• ๋“ฏ ํ•˜๋‹ค.

 

 

 

โœ…  ๋ชฉ์ฐจ

1. ์Šคํฌ๋กค ๋ทฐ ๊ธฐ๋ณธ ๊ฐ€์ด๋“œ - ์ƒํ•˜๋กœ ์›€์ง์ด๊ธฐ (Vertical Scroll View)

2. ์Šคํฌ๋กค ๋ทฐ Advanced - ์ขŒ์šฐ๋กœ๋„ ์›€์ง์ด๊ธฐ (Horizontal Scroll View)

 

 

โœ… ๊ทธ๋Ÿผ ์ด์ œ ์ง„์งœ ์‹œ์ž‘!! 

1๏ธโƒฃ  Vertical Scroll View

์ผ๋‹จ ์Šคํ† ๋ฆฌ๋ณด๋“œ์—์„œ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์— ์Šคํฌ๋กค ๋ทฐ๋ฅผ ์ถ”๊ฐ€ํ•ด! 

๊ทธ ์ดํ›„์— ๋ ˆ์ด์•„์›ƒ์„ ์žก์•„์ค„๊ฑด๋ฐ, ๊ทธ๋ƒฅ ์ƒํ•˜์ขŒ์šฐ 0,0,0,0 ์œผ๋กœ ์„ธํŒ…ํ•˜๋ฉด ์•„๋ž˜์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋นจ๊ฐ„๋ถˆ์ด ๋“ค์–ด์˜ค๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์–ด.

์ด์ „์—๋Š” ์•ˆ๋“ค์–ด์˜ค๋Š”๋ฐ ์กฐ๊ธˆ ์ด์ƒํ•˜์ง€? 

์Šคํฌ๋กค ๋ทฐ์—์„œ๋Š” ์ž๊ธฐ ๋ทฐ ๋ง๊ณ  ์ปจํ…์ธ  ๋ทฐ์— ๋Œ€ํ•œ ์ œ์•ฝ์กฐ๊ฑด๋„ ์„ค์ •ํ•ด์ค˜์•ผ ๋นจ๊ฐ„์ƒ‰์ด ์—†์–ด์ง€๋‹ˆ๊นŒ ์ผ๋‹จ ๋„˜์–ด๊ฐ€๋ฉด์„œ ๋ณด์ž

์Šคํฌ๋กค ๋ทฐ๋ฅผ ์Šคํ† ๋ฆฌ๋ณด๋“œ์— ๋„ฃ์€ ํ›„ ์ถ”๊ฐ€ํ•œ ๋ชจ์Šต
์Šคํฌ๋กค ๋ทฐ์˜ ์ƒํƒœ

์šฐ๋ฆฌ๊ฐ€ ๋ ˆ์ด์•„์›ƒ๊นŒ์ง€ ์žก์•˜๋‹ค๋ฉด ํ˜„์žฌ ์ด๋Ÿฐ ์ƒํƒœ์ผ๊ฑฐ์•ผ.

์ผ๋‹จ์€ ์šฐ์ธก ์Šคํฌ๋กค ๋ทฐ ์ชฝ์—์„œ Content Layout Guide๋ฅผ ๊บผ์ฃผ๋„๋ก ํ•˜์ž.

Content Layout Guide๋ฅผ ๋„๊ณ  View๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์Šคํฌ๋กค ๋ทฐ์— ๋ ˆ์ด์•„์›ƒ์„ ์—ฐ๊ฒฐํ•œ ์ƒํƒœ

์ผ๋‹จ Guide๋ฅผ ๋„๋ฉด ์œ„์˜ ์‚ฌ์ง„๊ณผ ๋‹ค๋ฅด๊ฒŒ ์Šคํฌ๋กค ๋ทฐ์— Guide ๋‘๊ฐœ๊ฐ€ ์‚ฌ๋ผ์ง„ ๊ฒƒ์„ ๋ˆˆ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด.

์—ฌ๊ธฐ๋ถ€ํ„ฐ ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ฆด ์ˆ˜๊ฐ€ ์žˆ์–ด์„œ ์Šคํฌ๋กค ๋ทฐ ์•ˆ์— ์žˆ๋Š” ๋ทฐ๋ฅผ ์ผ๋ฐ˜ ๋ทฐ, ์Šคํฌ๋กค ๋ทฐ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ทฐ๋ฅผ ์Šˆํผ ๋ทฐ๋ผ๊ณ  ๋ถ€๋ฅผ๊ฒŒ.

 

1. ๊ทธ ๋‹ค์Œ์—๋Š” ์œ„์˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ View(์ผ๋ฐ˜ ๋ทฐ)๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ ˆ์ด์•„์›ƒ์€ ์Šคํฌ๋กค ๋ทฐ์™€ ์ผ๋ฐ˜ ๋ทฐ๋ฅผ ์—ฐ๊ฒฐํ•ด์„œ, leading๊ณผ top์„ ์ค˜.

์ด์ œ๋ถ€ํ„ฐ ์œ ์˜ํ•ด์„œ ๋ด์•ผํ•ด..!

2. โ—๏ธ(์ฃผ์˜) ๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐ˜ ๋ทฐ๋ฅผ ์Šˆํผ๋ทฐ์— ๋ ˆ์ด์•„์›ƒ์„ ์—ฐ๊ฒฐํ•ด์„œ Equal Width๋ฅผ ์„ค์ •ํ•ด์ฃผ๊ณ ,

3. ๊ทธ ๋‹ค์Œ์—๋Š” ์ผ๋ฐ˜ ๋ทฐ๋ฅผ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ์—ฐ๊ฒฐํ•ด์„œ Height๋ฅผ ์žก์•„์ค˜.

(โญ๏ธ ์ด๊ฑฐ ์•„์ฃผ ์ค‘์š”ํ•œ ์—ญํ• ์ธ๋ฐ, ์ด ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๋ฉด ์Šคํฌ๋กค ๋ทฐ์˜ ์ „์ฒด์ ์ธ ๊ธธ์ด๋ฅผ ์„ค์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ์–ด..!)

4. ๊ทธ ๋‹ค์Œ์—๋Š” ์ผ๋ฐ˜ ๋ทฐ๋ฅผ ๋‹ค์‹œ ์Šคํฌ๋กค ๋ทฐ๋กœ ๋ ˆ์ด์•„์›ƒ์„ ์—ฐ๊ฒฐํ•ด์„œ ํŠธ๋ ˆ์ผ๋ง๊ณผ ๋ฐ”ํ…€์„ ์ฃผ๊ธฐ.

 

๊ทธ๋Ÿผ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ธ ์„ธํŒ…์ด ๋๋‚˜ -> ๋ ˆ์ด์•„์›ƒ ๊ฒฝ๊ณ ์ธ ๋นจ๊ฐ„์ƒ‰์ด ์‚ฌ๋ผ์ ธ!!

5. ์ผ๋ฐ˜ ๋ทฐ๋ฅผ ์Šˆํผ๋ทฐ์— Equal Height๋กœ ์—ฐ๊ฒฐํ•ด์ฃผ๊ธฐ

๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ ์ผ๋ฐ˜ ๋ทฐ์˜ ๊ฒฝ์šฐ์—๋Š” ์ปจํ…์ธ ์˜ ์„ฑ๊ฒฉ์„ ๊ฐ€์ ธ์„œ ๋†’์ด๊ฐ€ ๋ฐ”๋€” ์ˆ˜๋„ ์žˆ์ž–์•„?

6. ๊ทธ๋ž˜์„œ ์ผ๋ฐ˜ ๋ทฐ์™€ ์Šˆํผ ๋ทฐ๋ฅผ ์—ฐ๊ฒฐํ•œ ์ œ์•ฝ์กฐ๊ฑด์„ ํด๋ฆญํ•ด์„œ priority๊ฐ’์„ ๋‚ฎ๊ฒŒ ์ˆ˜์ •ํ•ด ์ค˜์•ผํ•ด

์šฐ์„ ์ˆœ์œ„ ์ˆ˜์ •

์ด๋ ‡๊ฒŒ ์ˆ˜์ •ํ•ด ์ฃผ๋ฉด ๋ผ. ์ž„์˜์˜ ๊ฐ’์„ ์ค˜๋„, ์•„๋‹ˆ๋ฉด ์—ฌ๊ธฐ ์ •ํ•ด์ง„ ๊ฐ’์„ ์ค˜๋„ ๋ผ.

 

โœ…  ์šฐ์„  6๋ฒˆ๊นŒ์ง€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ–ˆ๋‹ค๋ฉด ์Šคํฌ๋กค ๋ทฐ๋Š” ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•  ์˜ˆ์ •!! ์•„๋ž˜์—๋Š” ๋ˆˆ์œผ๋กœ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ž‘์„ฑํ•œ ๋ถ€๋ถ„์ด์•ผ

 

7. ๊ทธ ๋‹ค์Œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด imageView์™€ StackView๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜.

8. ๋ˆˆ์œผ๋กœ ํ™•์ธํ•˜๊ธฐ ์‰ฌ์›Œ์•ผํ•˜๋‹ˆ๊นŒ ์ด๋ฏธ์ง€ ๋ทฐ์—๋Š” ์ดˆ๋ก์ƒ‰ ๋ฐฐ๊ฒฝ์„ ์Šคํƒ๋ทฐ์—๋Š” ๋ทฐ๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„ ๊ทธ ๋ทฐ์˜ ๋ฐฐ๊ฒฝ์ƒ‰์„ ๋ณด๋ผ์ƒ‰์œผ๋กœ ์„ค์ •ํ•ด ์ฃผ๊ธฐ.

9. ์•„ ๊ทผ๋ฐ, ์Šคํ† ๋ฆฌ๋ณด๋“œ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ์Šคํฌ๋กค ํ•˜๋“ฏ์ด ๋ณด๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ์ง€?

๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ docker๋ฅผ ํด๋ฆญํ•œ ํ›„ ์‹œ๋ฎฌ๋ ˆ์ดํ‹ฐ๋“œ ์‚ฌ์ด์ฆˆ๋ฅผ ํ”„๋ฆฌํผ์œผ๋กœ ๋ณ€๊ฒฝํ›„ ์„ค์ •ํ•ด์ฃผ๊ธฐ

 

์Šคํ† ๋ฆฌ ๋ณด๋“œ์—์„œ ์Šคํฌ๋กค ๋ทฐ๋ฅผ ํ™•์ธํ•ด๋ณด์ž!!

 

โœ…  ๊ทธ๋Ÿผ ์ขŒ์šฐ๋กœ๋„ ์ด๋™ํ•˜๊ฒŒ๋” ๋งŒ๋“ค์–ด ๋ณผ๊นŒ?

2๏ธโƒฃ. Horizontal Scroll View

 

1. ์šฐ์„  ์Šคํƒ ๋ทฐ์•ˆ์— 3๊ฐœ์˜ ๋ทฐ๋ฅผ ๋„ฃ์„๊ฑฐ์•ผ.

์Šคํƒ๋ทฐ์˜ ๋†’์ด๊ฐ€ ํ˜„์žฌ 600์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์–ด -> ์ด๊ฑด ํ—ค์ œํ•ด๋„ ๋ผ. ๊ทธ ์ด์œ ๋Š” ์•ˆ์˜ ๋ทฐ๋“ค์˜ ๋†’์ด ๋”ฐ๋ผ์„œ ์ž๋™์œผ๋กœ ์„ค์ •์ด ๋ผ

 

2. ๋„ฃ์€ 3๊ฐœ์˜ ๋ทฐ์— Heigth๋ฅผ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๋ ˆ์ด์•„์›ƒ์„ ์žก์•„์„œ ๊ฐ๊ฐ 200์œผ๋กœ ์„ค์ •ํ•ด์ฃผ๊ธฐ

๊ฐ ๋ทฐ์˜ ๋†’์ด๋Š” 200์œผ๋กœ ์„ค์ •ํ•ด์ฃผ๊ธฐ

3. ์ด์ œ ๋ทฐ 3๊ฐœ๋ฅผ ๋™์‹œ์— ์ง€์šฐ๊ณ  ์Šคํƒ ๋ทฐ ์•ˆ์— ์ปจํ…Œ์ด๋„ˆ ๋ทฐ๋ฅผ ๋„ฃ๋Š”๋‹ค.

์ปจํ…Œ์ด๋„ˆ ๋ทฐ 2๊ฐœ๋ฅผ ์Šคํƒ ๋ทฐ ์•ˆ์— ๋„ฃ์€ ํ›„ ๊ฐ ์ปจํ…Œ์ด๋„ˆ ๋ทฐ์˜ ๋†’์ด๋ฅผ ์žก์•„์ค„๊ฑด๋ฐ 200์œผ๋กœ ํ•œ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ๋ทฐ๋ฅผ ๋„ฃ์„๋•Œ, ์ด๋ฏธ ์ƒ์„ฑ๋œ ์ปจํ…Œ์ด๋„ˆ ๋ทฐ๋ฅผ ๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด, ํŒŒ๋ž€์ƒ‰๊ณผ, ๋…ธ๋ž€์ƒ‰์œผ๋กœ ํ‘œํ˜„๋œ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š”๋ฐ, ๊ทธ๋Ÿด๋•Œ๋Š” ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“  ํ›„์—, ์ปจํ…Œ์ด๋„ˆ ๋ทฐ ์ค‘ ๋ทฐ ์ปจํ‹€๋กค๋Ÿฌ๋ฅผ ๊ฐ–๊ณ  ์žˆ์ง€ ์•Š๋Š” ๊ฒƒ์— ์—ฐ๊ฒฐํ•œ๋‹ค.

์ด๋•Œ ์—ฐ๊ฒฐํ• ๋•Œ๋Š” Embed ๋ฅผ ์„ธ๊ทธ๋กœ ์ฃผ๋ฉด ๋œ๋‹ค. -> ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ ๋ชจ์–‘์ด ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘๊ฒŒ ๋ฐ”๋€๋‹ค.

์ปจํ…Œ์ด๋„ˆ ๋ทฐ
์Šคํƒ ๋ทฐ ์•ˆ์— ์ปจํ…Œ์ด๋„ˆ ๋ทฐ๋ฅผ ๋„ฃ์€ ๋ชจ์Šต
Embed๋ฅผ ์„ธ๊ทธ๋กœ ์ฃผ๋Š” ๋ชจ์Šต

4. ๋‹ค์Œ์—๋Š” ๋ ˆ์ด๋ธ”๊ณผ ์ปฌ๋ ‰์…˜ ๋ทฐ๋ฅผ ๋ทฐ์— ๋„ฃ๊ณ  ์ปฌ๋ ‰์…˜ ๋ทฐ ์•ˆ์— ์ด๋ฏธ์ง€ ๋ทฐ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

๋ ˆ์ด์•„์›ƒ์€ ๋ ˆ์ด๋ธ”์€ ํƒ‘(6), ํŠธ๋ ˆ์ผ๋ง(8)

์ปฌ๋ ‰์…˜ ๋ทฐ๋Š” ํŠธ๋ ˆ์ผ๋ง(0), ๋ฆฌ๋”ฉ(0), ๋ฐ”ํ…€(6), ๋†’์ด(160)์œผ๋กœ ์ค€๋‹ค. 

โ—๏ธ ์—ฌ๊ธฐ์„œ ๋…ธ๋ž€์ƒ‰ ๋ฐฐ๊ฒฝ์„ ๊ฐ€์ง„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์„œ, ๊ทธ๋ƒฅ ํŒŒ๋ž€์ƒ‰ ๋ณต๋ถ™ํ•œ ํ›„ ์‚ฌ์šฉํ–ˆ๋‹ค.

๋ ˆ์ด์•„์›ƒ์„ ์ค€ ๋ชจ์Šต

 

5. ๋‹ค์Œ์œผ๋กœ๋Š” ์ปค์Šคํ…€ ํด๋ž˜์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ , ์ปค์Šคํ…€ ํด๋ž˜์Šค์— IBOulet์„ ํƒ€์ดํ‹€์„ ์—ฐ๊ฒฐํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ปฌ๋ ‰์…˜ ๋ทฐ๋Š” ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋ž‘, ๋ฐ์ดํ„ฐ์†Œ์Šค ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ ์œ„์ž„ํ•˜๋Š”๊ฑฐ ์žŠ์ง€๋ง๊ธฐ.

์ปค์Šคํ…€ ํด๋ž˜์Šค ์ถ”๊ฐ€.

๐Ÿ˜€  RecommendListViewController.swift ์ฝ”๋“œ!

//
//  RecommendListViewController.swift
//  MyNetflix
//
//  Created by Hamlit Jason on 2021/06/29.
//

import UIKit

class RecommendListViewController: UIViewController {

    @IBOutlet weak var sectionTitle: UILabel!
    let viewModel = RecommentListViewModel()
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        updateUI()
    }
    
    func updateUI() {
        sectionTitle.text = viewModel.type.title
    }
}

extension RecommendListViewController: UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return viewModel.numOfItems
    }
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "RecommendCell", for: indexPath) as? RecommendCell else {
            return UICollectionViewCell()
        }
        
        let movie = viewModel.item(at: indexPath.item)
        cell.updateUI(movie: movie)
        return cell
    }
}


extension RecommendListViewController: UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: 120, height: 160)
    }
}

class RecommentListViewModel {
    enum RecommendingType {
        case award
        case hot
        case my
        
        var title: String {
            switch self {
            case .award: return "์•„์นด๋ฐ๋ฏธ ํ˜ธํ‰ ์˜ํ™ฉ"
            case .hot: return "์ทจํ•œ์ €๊ฒฉ HOT ์ฝ˜ํ…์ธ "
            case .my: return "๋‚ด๊ฐ€ ์ฐœํ•œ ์ฝ˜ํ…์ธ "
            
            }
        }
    }
    
    private (set) var type: RecommendingType = .my
    private var items: [DummyItem] = []
    
    var numOfItems: Int {
        return items.count
    }
    
    func item(at index: Int) -> DummyItem {
        return items[index]
    }
    
    func updateType(_ type: RecommendingType) {
        self.type = type
    }
    
    func fetchItems() {
        self.items = MovieFetcher.fetch(type)
    }
}

class RecommendCell: UICollectionViewCell {
    @IBOutlet weak var thumbnailImage: UIImageView!
    
    func updateUI(movie: DummyItem) {
        thumbnailImage.image = movie.thumbnail
    }
}

class MovieFetcher {
    static func fetch(_ type: RecommentListViewModel.RecommendingType) -> [DummyItem] {
        switch type {
        case .award:
            let movies = (1..<10).map { DummyItem(thumbnail: UIImage(named: "img_movie_\($0)")!) }
            return movies
        case .hot:
            let movies = (10..<19).map { DummyItem(thumbnail: UIImage(named: "img_movie_\($0)")!) }
            return movies
        case .my:
            let movies = (1..<10).map { $0 * 2 }.map { DummyItem(thumbnail: UIImage(named: "img_movie_\($0)")!) }
            return movies
        }
    }
}

struct DummyItem {
    let thumbnail: UIImage
}

 

7. ๋‹ค์Œ์€ UpComingViewController.swift ๋ฅผ ๋งŒ๋“  ํ›„์— ์•„๋ž˜์˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ์ž‘์„ฑํ•œ๋‹ค.

import UIKit

class UpComingViewController : UIViewController {
    
    var awardRecommendListViewController: RecommendListViewController!
    var hotRecommendListViewController: RecommendListViewController!
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "award" {
            let destinationVC = segue.destination as? RecommendListViewController
            awardRecommendListViewController = destinationVC
            awardRecommendListViewController.viewModel.updateType(.award)
            awardRecommendListViewController.viewModel.fetchItems()
        } else if segue.identifier == "hot" {
            let destinationVC = segue.destination as? RecommendListViewController
            hotRecommendListViewController = destinationVC
            hotRecommendListViewController.viewModel.updateType(.hot)
            hotRecommendListViewController.viewModel.fetchItems()
        }
    }
    
}

 

8. ์ดํ›„์—๋Š” ์„ธ๊ทธ๋ฅผ ์ง€์ •ํ•ด ์ค˜์•ผ๊ฒ ์ง€?

ํŒŒ๋ž€์ƒ‰ ์„ธ๊ทธ๋Š” award, ๋…ธ๋ž€์ƒ‰ ์„ธ๊ทธ๋Š” hot์œผ๋กœ ์„ธ๊ทธ๋ฅผ ์ค€๋‹ค.

โ—๏ธ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ๋Œ๋ ธ์„ ๋•Œ, ๋‚˜๋Š” ํ™”๋ฉด์ด ์ œ๋Œ€๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์•˜๋Š”๋ฐ, ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ–ˆ๋”๋‹ˆ ๋˜์—ˆ๋‹ค.. ํ˜น์‹œ๋ผ๋„ ์•ˆ๋œ๋‹ค๋ฉด, ๋‚ด ์ฝ”๋“œ๋ฅผ ๋ณต๋ถ™ํ•ด์„œ ์Šคํ† ๋ฆฌ๋ณด๋“œ ์ชฝ์„ ๋ฐ”๊ฟ”๋ณผ ๊ฒƒ!

ํŒŒ๋ž€์ƒ‰ - award, ๋…ธ๋ž€์ƒ‰ - hot

 

 

์ด๋Ÿฌ๋ฉด ์ผ๋‹จ ๋!!

 

์ดํ›„์—๋Š” ํŒŒ์ด์–ด๋ฒ ์ด์Šค๋ฅผ ์ด์šฉํ•ด์„œ ๊ฒ€์ƒ‰์–ด๋ฅผ ๋ฐ›์•„์˜ค๋Š” ์ž‘์—…์„ ํ•ด๋ณด์ž!

 

 

(์ถ”๊ฐ€)

์Šคํฌ๋กค ๋ทฐ์—์„œ RecommendListViewController ๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์—ˆ๋Š”์ง€ ๊ถ๊ธˆํ•˜๋‹ค๋ฉด...

์—ฌ๊ธฐ์„œ RecommendListViewController๋ถ€๋ถ„์„ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž˜

https://rldd.tistory.com/126

 

Comments