[UIKit] CustomView
ยท
๐ŸŽ Dev/UIKit
์ƒˆ์‹น์—์„œ ํ›„๋ฐ˜๊ธฐ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•  ๋‹น์‹œ CustomView๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์–ด์„œ ์ •๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.์ฃผ๋กœ ์ฝ”๋“œ๋ฒ ์ด์Šค๋กœ UI๋ฅผ ๊ทธ๋ ค์™”๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๊ธ€์—์„  ์ฝ”๋“œ ๋ฒ ์ด์Šค + SnapKit ๊ธฐ๋ฐ˜์œผ๋กœ customView๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃฐ ์˜ˆ์ •์ด๋‹ค.        ์ปค์Šคํ…€ ๋ทฐ๋ฅผ ์™œ ์‚ฌ์šฉํ• ๊นŒโ“ ์šฐ์„  ๋‚ด๊ฐ€ CustomView๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ์žฌ์‚ฌ์šฉ์„ฑ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค.์œ„ ์บก์ณ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ, ๋ฐ˜๋ณต๋˜๋Š” UI ์š”์†Œ๊ฐ€ ๋งŽ์€ ํ™”๋ฉด์„ ๊ทธ๋ฆด ๋•Œ ๋งค๋ฒˆ UI์™€ ๊ด€๋ จ๋œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๊ต‰์žฅํžˆ ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ํฐํŠธ๋ฅผ ๋ฐ”๊ฟ”์•ผํ•œ๋‹ค๋ฉด?ํฌ์ธํŠธ ์ปฌ๋Ÿฌ๋ฅผ ๋ฐ”๊ฟ”์•ผํ•œ๋‹ค๋ฉด?๋ฒ„ํŠผ์˜ ์ฝ”๋„ˆ ๋ ˆ๋””์–ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค๋ฉด? ๋™์ผํ•œ ๊ตฌ์„ฑ์˜ ์ฝ”๋“œ๋ฅผ ์ผ์ผ์ด ์ฐพ์•„์„œ ์ˆ˜์ •ํ•œ๋‹ค๋ฉด, ๋ฐ˜๋ณต๋˜๋Š” ๋ทฐ์˜ ์ˆ˜๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ์ˆ˜์ •์˜ ๊ตด๋ ˆ์— ๋น ์งˆ ์ˆ˜ ๋ฐ–์— ์—†์œผ๋‹ˆ๊นŒ. ๋˜ํ•œ, ๋ถ€๋ถ„์ ์œผ..
[UIKit] ์•ฑ์˜ ์ƒ๋ช…์ฃผ๊ธฐ
ยท
๐ŸŽ Dev/UIKit
โœ”๏ธŽ ์ƒ๋ช…์ฃผ๊ธฐ (Life Cycle) ์ƒ๋ช…์ฃผ๊ธฐ๋ž€, ์•ฑ์ด ์ตœ์ดˆ๋กœ ์‹คํ–‰๋˜๋Š” ์‹œ์ ๋ถ€ํ„ฐ ์ข…๋ฃŒ๋˜๋Š” ์‹œ์ ๊นŒ์ง€์˜ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋Ÿฐ ์•ฑ์˜ ์ƒํƒœ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€ ํ•˜๋ฉด, "the current state of your app determines what it can and can’t do at any time." ์ฆ‰, ํ˜„์žฌ ์‹œ์ ์—์„œ ์•ฑ์ด ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š๋ƒ๋ฅผ ๊ฒฐ์ • ์ง“๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค. ์•ฑ์„ ๊ฐœ๋ฐœ ๋ฐ ์‚ฌ์šฉ์„ ํ•˜๋‹ค๋ณด๋ฉด ์‚ฌ์šฉ์ค‘์ธ ์•ฑ์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์ž ์‹œ ๋ณด๋‚ผ ๋•Œ๋„ ์žˆ๊ณ  (์นดํ†ก์œผ๋กœ ๋ฐ›์€ ๊ณ„์ขŒ๋ฒˆํ˜ธ๋ฅผ ๋ณต์‚ฌํ•˜๊ณ , ๊ทธ๋Œ€๋กœ ์€ํ–‰์•ฑ์„ ์ผœ์„œ ๋ถ™์—ฌ๋†“๋Š”๋‹ค๊ฑฐ๋‚˜ ํ•˜๋Š” ์ƒํ™ฉ), ๋ฐฑ๊ทธ๋ผ์šด๋“œ์— ๋‘” ์ฑ„๋กœ ํ•ด๋‹น ์•ฑ์„ ๊ณ„์† ์‚ฌ์šฉํ•  ๋•Œ๋„ ์žˆ๊ณ  (์œ ํŠœ๋ธŒ ๋ฎค์ง์„ ์‚ฌ์šฉ์ค‘์ธ ์ฑ„๋กœ ๋‹ค๋ฅธ ์•ฑ์„ ๋ฉ”์ธ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ ), ํฌ๊ทธ๋ผ์šด๋“œ ์ƒํƒœ๋กœ ๊ทธ ์•ฑ์„ ์ด์šฉํ•  ..
[UIKit] Font ์„ค์ •ํ•˜๊ธฐ
ยท
๐ŸŽ Dev/UIKit
ํฐํŠธ ์ ์šฉ์ด๋ž€ ๊ฒƒ...๐Ÿง ์ฐพ์•„์„œ ๋”ฐ๋ผํ•˜๋ฉด ๋ณ„ ํƒˆ ์—†์ด ์ ์šฉ ๋  ๋งŒํผ ์‰ฝ์ง€๋งŒ, ์€๊ทผํžˆ ์ ์šฉ ๋‹จ๊ณ„๊ฐ€ ํ—ท๊ฐˆ๋ฆฌ๊ธฐ์— ๊ณผ๊ฑฐ ํ”„๋กœ์ ํŠธ๋ฅผ UI๋ถ€ํ„ฐ ๋ฆฌํŒฉํ† ๋ง ํ•˜๋Š” ๊น€์— ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. 1๏ธโƒฃ ๋ฌด๋ฃŒ ํฐํŠธ ์‚ฌ์ดํŠธ ์ด์šฉํ•˜๊ธฐ https://noonnu.cc/ https://fonts.google.com/ โž” ๋ˆˆ๋ˆ„๋‚˜ ๊ตฌ๊ธ€ ํฐํŠธ ๋“ฑ, ๋ฌด๋ฃŒ๋กœ ํฐํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” ์‚ฌ์ดํŠธ์—์„œ TTF ํฐํŠธ๋ฅผ ๋‹ค์šด ๋ฐ›๊ธฐ โž” ๋ณดํ†ต ํ•œ๊ธ€ ํฐํŠธ๋Š” ๋ˆˆ๋ˆ„, ์˜์–ด ํฐํŠธ๋Š” ๊ตฌ๊ธ€! ์ธ ๋Š๋‚Œ์ด ๊ฐ•ํ•˜์ง€๋งŒ, ์ด๋ž˜์ €๋ž˜ ๋ˆˆ๋ˆ„ ํฐํŠธ๋ฅผ ์จ๋ณธ ๊ฒฐ๊ณผ... ์˜์–ด ํฐํŠธ ๋Œ€์‘๋„ ๋‚˜์˜์ง€ ์•Š์•„์„œ ํ•œ๊ตญ์–ด-์˜์–ด ๋‘˜ ๋‹ค ์‚ฌ์šฉํ•  ๋• ๋ˆˆ๋ˆ„๋งŒ ์‚ฌ์šฉํ•ด๋„ ์ถฉ๋ถ„ํ•œ๋“ฏ. 2๏ธโƒฃ Add to targets ์— ํฐํŠธ๋ฅผ ์‚ฌ์šฉํ•  ํ”„๋กœ์ ํŠธ ์ฒดํฌํ•˜๊ธฐ 3๏ธโƒฃ InfoPlist ์„ค์ • โž” Information Property..
[UIKit/Storyboard] ํ‚ค๋ณด๋“œ ๋‚ด๋ฆฌ๊ธฐ
ยท
๐ŸŽ Dev/UIKit
๐Ÿ’ป ํ…์ŠคํŠธํ•„๋“œ๋ฅผ ๋‹จ์ˆœํžˆ ๋„ฃ๊ธฐ๋งŒ ํ•˜๋ฉด ํ‚ค๋ณด๋“œ๊ฐ€ ๋‚ด๋ ค๊ฐ€์ง€ ์•Š๋Š” ๊ฑธ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋กœ ํ™•์ธํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ํ™”๋ฉด์„ ํ„ฐ์น˜ํ•ด์„œ ํ‚ค๋ณด๋“œ๋ฅผ  ๋‚ด๋ฆฌ๊ฑฐ๋‚˜, return key๋ฅผ ๋ˆŒ๋Ÿฌ ๋‚ด๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ํ‚ค๋ณด๋“œ๋ฅผ ๋‚ด๋ฆฌ๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค.        ์‚ฌ์šฉ์ž๋Š” ๋ณดํ†ต ํ‚ค๋ณด๋“œ๋ฅผ ๋‚ด๋ฆด ๋•Œ, ๋นˆ ํ™”๋ฉด์„ ํ„ฐ์น˜ํ•˜๊ฑฐ๋‚˜ ํ˜น์€ return key๋ฅผ ๋ˆŒ๋Ÿฌ ํ‚ค๋ณด๋“œ๋ฅผ ํ™”๋ฉด ์•„๋ž˜๋กœ ๋‚ด๋ฆฐ๋‹ค. ์ด๋Ÿฐ action์„ ๊ตฌํ˜„ํ•ด์ฃผ๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?      (1) IBAction์œผ๋กœ ์—ฐ๊ฒฐํ•  ๋•Œ Event๋ฅผ Did End On Exit๋กœ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค.   Action์œผ๋กœ ๋ทฐ๊ฐ์ฒด๋ฅผ ์—ฐ๊ฒฐํ•ด์ค„ ๋•Œ, Event๋ฅผ Did End On Exit๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ return key๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ‚ค๋ณด๋“œ๊ฐ€ ๋ฐ”๋กœ ๋‚ด๋ ค๊ฐ€๋Š” ..
[UIKit/Storyboard] ํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ๋‹ค๋ฅธ ์Šคํ† ๋ฆฌ๋ณด๋“œ ๋ณด๋Š” ๋ฒ•
ยท
๐ŸŽ Dev/UIKit
๐Ÿ’ป ํ•œ ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ ์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ์„ฑํ–ˆ์„ ๋•Œ, ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ์›ํ•˜๋Š” ์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ๋„์šฐ๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ด๋ณด์ž.     ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋ณดํ†ต 'Main'์ด๋ž€ ์ด๋ฆ„์„ ๋‹จ ์Šคํ† ๋ฆฌ๋ณด๋“œ๊ฐ€ ํ•จ๊ป˜ ์ƒ์„ฑ์ด ๋œ๋‹ค. ํ•œ ํ”„๋กœ์ ํŠธ ์•ˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋”ฐ๋กœ ์„ค์ •์„ ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ์•„๋ฌด๋ฆฌ entry point๋ฅผ ์„ค์ •ํ•ด์ฃผ์–ด๋„ Main ์Šคํ† ๋ฆฌ๋ณด๋“œ๋งŒ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์— ๋‚˜์˜จ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ๋‹ค๋ฅธ ์Šคํ† ๋ฆฌ๋ณด๋“œ์— ์žˆ๋Š” ์”ฌ์„ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„๊นŒ?         Main ์Šคํ† ๋ฆฌ๋ณด๋“œ ๋ง๊ณ  VariousPractice๋ผ๋Š” ์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ๋„์šฐ๊ธฐ ์œ„ํ•ด์„  Info ํ™”๋ฉด์—์„œ ์ˆ˜์ •์„ ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.        Info๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ด๋Ÿฐ ํ™”๋ฉด์ด ๋œจ๋Š”๋ฐ, ์ด๋•Œ Application Scene Manifest..
[UIKit/Storyboard] ์•„์šธ๋ › ํ•จ์ˆ˜ (@IBOutlet)๊ณผ ์•ก์…˜ ํ•จ์ˆ˜ (@IBAction)
ยท
๐ŸŽ Dev/UIKit
์šฐ์„ , IB- ๋Š” Interface Builder์˜ ์•ฝ์ž๋กœ, ์Šคํ† ๋ฆฌ๋ณด๋“œ์—์„œ ์ž‘์—…์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์Œ์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.   ๐Ÿ“Œ @IBOutlet์ด๋ž€?  - ๊ฐ์ฒด์— ์†์„ฑ(์ƒ‰์ƒ, ๊ธ€์˜ ๋‚ด์šฉ, ์„  ๋“ฑ)์„ ์ง€์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์›๋ฆฌ์ด๋‹ค.   ๐Ÿ“Œ@IBAction์ด๋ž€? - ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ๊ณผ ๊ฐ™์ด view์— ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์„ ๋•Œ ์ •ํ•ด์ง„ ์ž‘์—…์„ ์‹คํ–‰ ์‹œํ‚ค๋Š”, ์ด๋ฒคํŠธ๋ฅผ ์ œ์–ดํ•˜๋Š” ํ•จ์ˆ˜ ํ‚ค์›Œ๋“œ์ด๋‹ค.     โž• ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ•์€ IBOulet๊ณผ IBAction์ด ๋™์ผํ•œ๋ฐ, ์•„๋ž˜ ๋ฐœํ–‰๊ธ€ ์ฐธ์กฐ 2023.07.29 - [Swift/Xcode] - ์”ฌ(Scene)๊ณผ Class ์—ฐ๊ฒฐ