๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
SeSAC

[iOS] TIL_230719

by lizzydev 2023. 7. 25.

โœ… ์ด๋ฏธ์ง€์™€ ๋ผ๋ฒจ ๋“ค์–ด๊ฐ„ ๋ฒ„ํŠผ ๋งŒ๋“ค๊ธฐ

๋ฒ„ํŠผ์˜ ์ด๋ฏธ์ง€๋Š” ์ค„์–ด๋“ค์ง€ ์•Š์Œ

→ ๋””์ž์ด๋„ˆ๊ฐ€ ํฌ๊ธฐ ์กฐ์ ˆํ•ด์„œ ๋ฆฌ์†Œ์Šค ์คŒ.

→์ด๋ฏธ์ง€๋ทฐ๋Š” ์‚ฌ์ด์ฆˆ ์กฐ์ ˆ ๊ฐ€๋Šฅํ•ด์„œ ๋” ์ˆ˜์›”ํ•จ.

→๋ฒ„ํŠผ ์Šคํƒ€์ผ์„ default๋กœํ•˜๋ฉด ๋ฒ„ํŠผ ๋‚ด ์ด๋ฏธ์ง€๋„ ์ˆ˜์ • ๊ฐ€๋Šฅ but ํ…์ŠคํŠธ๋ฅผ ์ด๋ฏธ์ง€ ์•„๋ž˜๋กœ๋Š” ๋ชป ๋‚ด๋ฆผ

์ด๋ฏธ์ง€์™€ ๋ผ๋ฒจ์„ ๋งŒ๋“ค๊ณ  ๊ทธ ์œ„์— ๋ฒ„ํŠผ์„ ์˜ฌ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ๋„ ๊ฐ€๋Šฅ

Plain Style ์ผ ๋•Œ

: ๋ฒ„ํŠผ ์ค„์—ฌ๋„ ์ด๋ฏธ์ง€ ์•ˆ ์ค„์–ด๋“ฌ.

Default Style ์ผ ๋•Œ

: ์ค„์ด๋ฉด ์ค„์–ด๋“ค์ง€๋งŒ ํ…์ŠคํŠธ ๊ฐ€๋ ค์ง

→ ํ…์ŠคํŠธ ์—†๋Š” ๋ฒ„ํŠผ์ผ ๋•Œ๋งŒ ์“ธ๋งŒํ• ๋“ฏ

→ ์ด๋ฏธ์ง€ ๋” ํฌ๊ฒŒ๋Š” ์•ˆ ๋จ

๊ฒฐ๋ก  : ๋ฒ„ํŠผ์€ ์ž์œ ์ž์žฌ๋กœ ์›ํ•˜๋Š” ๋ชจ์–‘ ๋งŒ๋“ค๊ธฐ๊ฐ€ ํž˜๋“ฆ.. ๋‹ค์–‘ํ•˜๊ฒŒ ์†์„ฑ ์„ค์ •ํ•ด๋ณด๋ฉด์„œ ์ตํ˜€์•ผํ•จ.

(๊ฑ ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“ค์–ด์„œ ๋„ฃ๋Š”๊ฒŒ ๋‚ซ์€๋“ฏ,,,)

โœ… User Defined Runtime Attributes

  • layer.cornerRadius๋Š” ์„ค์ •์ด ๋จ.
  • borderColor๋Š” CGColor๋ฅผ ๋ฐ›์•„์•ผํ•ด์„œ UIColor๋กœ ์„ค์ • ๋ถˆ๊ฐ€๋ผ ์•ˆ ๋จ.

 

1. Scene๊ณผ Logic

Scene

: ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ๊ฐ์ ์œผ๋กœ ์ ‘ํ•˜๋Š” ์˜์—ญ

  • ์ธํ„ฐํŽ˜์ด์Šค ๋นŒ๋”๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ.
  • ๋‹จ์ง€ ์‹œ๊ฐ์ ์ธ ์š”์†Œ์— ๋ถˆ๊ณผํ•˜๋ฉฐ, ๋กœ์ง๊ณผ ๋ฌด๊ด€

ex. ๋ทฐ๊ฐ์ฒด, ์ œ์Šค์ณ, ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ (์Šค๋ณด๋กœ ๊ฐ€๋Šฅ)

Logic

: ๊ธฐ๋Šฅ๊ตฌํ˜„์„ ์œ„ํ•ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ (swift ์ฝ”๋“œ)

ํ•ต์‹ฌ์€ Scene๊ณผ Logic์„ ์Œ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ

๊ฐ ํ™”๋ฉด(Scene)์€ ๊ฐ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๊ตฌํ˜„

2. ์ฝ”๋“œ๋กœ ๋ทฐ ๋งŒ๋“ค๊ธฐ

โœ… ํŒŒ์ผ ์ƒ์„ฑ

  • Group: ํŒŒ์ผ ์œ„์น˜ ์„ค์ •
  • Target: ๋ฌด์กฐ๊ฑด ์ฒดํฌ
    • Target์„ ํ•ด์ œํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ์•ˆ์— ์žˆ์Œ์—๋„ ์ž๊ธฐ ๊ฒƒ์ธ์ง€ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ

import ์ฃผ์„ ์ฒ˜๋ฆฌ

Identity Inspector

  • Class์— ๋งŒ๋“ค์–ด๋†“์€ UIViewControllerํŒŒ์ผ ๋ช… ์ž‘์„ฑ (์—”ํ„ฐ ๊ผญ ์น˜๊ธฐ !)
  • inherit Module From Target ์•ˆํ•˜๋ฉด ๋ชป ์ฐพ์•„์„œ ์˜ค๋ฅ˜ ๋ชปํ•  ํ™•๋ฅ  ํผ

  • ViewDidLoad ์•ˆ ์ด๋‚˜ class ๋ฐ–์—๋Š” ๋ชป ๋„ฃ์Œ.

  • Strong์œผ๋กœ ์„ค์ •

  • IB: Interface Builder
  • UIImageView! → ! ๊ฐ•์ œ ์–ธ๋ž˜ํ•‘์€ apple์ด ์ผ๋‹จ ๋งŒ๋“ค์–ด์ค€๊ฑฐ๋‹ˆ๊นŒ ์“ฐ์ž(๋ฌด์กฐ๊ฑด ์ด๋ฏธ์ง€๋ทฐ๋ผ๋Š” ๋Š๋‚Œ์˜ ์˜๋ฏธ)
  • ViewDidLoad
    • ์‚ฌ์šฉ์ž์—๊ฒŒ ํ™”๋ฉด์ด ๋ณด์ด๊ธฐ ์ง์ „์— ์‹คํ–‰๋˜๋Š” ๋ถ€๋ถ„
    • ๋ชจ์„œ๋ฆฌ ๋‘ฅ๊ธ€๊ธฐ, ๊ทธ๋ฆผ์ž ๋“ฑ ์Šคํ† ๋ฆฌ๋ณด๋“œ์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์—†๋Š” UI๋ฅผ ์„ค์ •ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ
    • ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ ์ƒ๋ช…์ฃผ๊ธฐ

  • ์ž๋™์™„์„ฑ ์ˆœ์„œ๋Š” ๋‚ด๊ฐ€ ๋ญ๋ฅผ ๋งŽ์ด ์“ฐ๋ƒ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Œ
  • ํฌ๊ธฐ ์กฐ์ ˆ ๊ฐ€๋Šฅ

UIImage(named:) : ์—์…‹์— ์žˆ๋Š” ์š”์†Œ ์‚ฌ์šฉํ•  ๋•Œ ์“ฐ์ž„

borderColor๋Š” CGColor๋ผ UIColor.red๋กœ ์„ค์ • ๋ถˆ๊ฐ€ (CG: CoreGraphics)

UIColor.red → UIColor.red.cgColor ๋กœ ํ•ด์ค˜์•ผํ•จ.

โœ… label ์ถ”๊ฐ€ํ•˜๊ณ  ์—ฐ๊ฒฐ ํ•ด์ฃผ๊ธฐ

โœ…  ์ด๋ฏธ์ง€์™€ ๋ผ๋ฒจ ์ด๋ฆ„ ๋ฐ”๊ฟ”๋ณด๊ธฐ

์ด๋ฏธ์ง€ ์ด๋ฆ„ ๋ณ€๊ฒฝ

์•„๋ž˜ ์ฝ”๋“œ ๋ณ€์ˆ˜๋“ค๋„ ๋ณต์‚ฌํ•ด์„œ ๋ฐ”๊พธ๋ฉด ๋Œ

๋ผ๋ฒจ ์ด๋ฆ„ ๋ณ€๊ฒฝ

infoLabel → informationLabel

์‹คํ–‰ํ•˜๋ฉด ์˜ค๋ฅ˜๋‚จ (key value coding-compliant Error)

→ ์Šค๋ณด ๊ฐ€๋ณด๊ธฐ

  • x๋ˆŒ๋Ÿฌ์„œ ์—†์• ๊ธฐ

  • ๋ฐ‘์— ์ƒˆ๋กœ ์ƒ๊ธด ์ด๋ฆ„๋“ค๋กœ ๋‹ค์‹œ ์—ฐ๊ฒฐ

โœ… ์ด๋ฆ„ ์ˆ˜์ • ์ดˆ๊ฐ„๋‹จ๋ฒ„์ „

  • ๋ณ€๊ฒฝํ•  ๋ณ€์ˆ˜ ์šฐํด๋ฆญ Rename

  • ์Šค๋ณด๊นŒ์ง€ ๋‹ค ๋ฐ”๊ฟ”์คŒ

โœ… ์ฝ”๋“œ ์Šค๋‹ˆํŽซ ๋งŒ๋“ค๊ธฐ

Shift + Command + L

๋กœ ์Šค๋‹ˆํŽซ ์ฐฝ ์—ด์–ด์„œ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ€์ ธ๋‹ค ์“ฐ๋ฉด ๋จ

Option + Command + ์ขŒ์šฐ ํ‚ค : ์ฝ”๋“œ ์—ด๊ณ  ์ ‘๊ธฐ

 

โœ… ์ฝ”๋“œ๋กœ ๋ฒ„ํŠผ ์„ค์ •ํ•ด๋ณด๊ธฐ

์Šคํ† ๋ฆฌ๋ณด๋“œ

์ฝ”๋“œ

highlighted

๋ฒ„ํŠผ์„ ๋–ผ์ง€๋ง๊ณ  ๊พน ๋ˆŒ๋ €์„ ๋•Œ(๋ˆŒ๋ฆฐ ๊ฑด ์•„๋‹˜ ํ™”๋ฉด์ด ๋„˜์–ด๊ฐ€๊ฑฐ๋‚˜ ํ•˜์ง€ ์•Š์Œ)

setTitle

์Šค๋ณด๋กœ ๋„ฃ์€ ์ด๋ฏธ์ง€ ๊ทธ๋Œ€๋กœ ์žˆ๊ณ  ํƒ€์ดํ‹€ ์ถ”๊ฐ€ ๋จ

setImage

๊ธฐ๋ณธ ์Šค๋ณด๋กœ ๋„ฃ์€ ์ด๋ฏธ์ง€๋Š” ์—†์–ด์ง€๋Š” ๋“ฏ?

โœ… ์ด๋ฏธ์ง€ ๋žœ๋ค์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ (๋žœ๋ค ํ•œ ์ˆ˜ ๋งŒ๋“œ๋Š” ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•)

let์„ ์“ฐ๋Š” ์ด์œ ๋Š” viewDidLoad ์‹คํ–‰ ์ค‘์— ๊ฐ’ ๋ฐ”๋€”์ผ ์—†์Œ

์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•

๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•

์˜ต์…”๋„ ๊ด€๋ จ ๊ฒฝ๊ณ  ๋œธ

๋ฐฐ์—ด์— ๊ฐ’์ด ์žˆ์–ด์„œ randomResult์— nil์ด ๋“ค์–ด๊ฐˆ ์ผ์ด ์—†์–ด์„œ ๋ฌธ์ œ ์ „ํ˜€ ์—†๋‹ค๊ณ  ์†Œ๋ฆฌ์น  ์ˆ˜ ์žˆ์Œ

์„ธ๋ฒˆ์งธ ๋ฐฉ๋ฒ•

๋žœ๋คํ•œ ์š”์†Œ๊ฐ€ ์•„๋‹Œ ๋žœ๋คํ•œ ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผ

โœ… ๋ฒ„ํŠผ์— ์•ก์…˜ ๋„ฃ๊ธฐ

  • Type : Any๋ง๊ณ  UIButton์œผ๋กœ ํ•ด์ค˜์•ผ ์•ˆ์ •์ ์ž„ (๋‚ด์ผ ์„ค๋ช…)
  • Name : ๋…ธ์ƒ๊ด€
  • Event : 99ํผ์„ผํŠธ touch up inside ์”€.
  • @IBAction ์ฝ”๋“œ๋Š” ํด๋ฆญํ–ˆ์„ ๋•Œ ์‹คํ–‰ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์—์„œ ์ด๋ฆ„ ๋ฐ”๊ฟ”๋„ ํด๋ฆญ ์•ˆ ํ•˜๋ฉด ์˜ค๋ฅ˜ ์•ˆ ๋‚จ(Rename์œผ๋กœ ๋ฐ”๊ฟจ์„ ๋•Œ๋Š” ์˜ค๋ฅ˜ ์—†์ด ์ž˜ ์ ์šฉ ๋จ)

์•ก์…˜ํ•จ์ˆ˜ ์•ˆ์— ์ด ๋ฐฐ์—ด์„ ๋„ฃ๋Š”๋‹ค๋ฉด ์•ก์…˜ํ•จ์ˆ˜ ๋ˆ„๋ฅผ ๋•Œ๋งˆ๋‹ค ๋ฐฐ์—ด์ด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ”๋‹ค๊ฐ€ ์‚ฌ๋ผ์กŒ๋‹ค๊ฐ€ ๋ฐ˜๋ณต

→์ˆ˜๋งŒ๋ฒˆ ๋ˆ„๋ฅธ๋‹ค๊ณ  ์น˜๋ฉด ๋น„ํšจ์œจ

๋”ฐ๋ผ์„œ ๋ฐ”๊นฅ์— ๋„ฃ์–ด์ฃผ๋Š”๊ฒŒ ์ข‹์Œ.

โœ… ํ•จ์ˆ˜ํ™” ํ•˜๊ธฐ

viewDidLoad() ์•ˆ์€ ์ตœ๋Œ€ํ•œ ์งง๊ฒŒ

โœ… ํ•จ์ˆ˜์˜ ์ข…๋ฅ˜

  • ์• ํ”Œ์ด ๋งŒ๋“  ๊ฒƒ
    • ex.viewDidLoad : ์• ํ”Œ์ด ๋งŒ๋“ค์–ด ๋†จ์œผ๋ฉฐ ์–ธ์ œ ์‹คํ–‰ ๋  ์ง€ ์• ํ”Œ์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์ •ํ•ด ๋†“์Œ.
  • ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ๋งŒ๋“  ๊ฒƒ
    • ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฆ„,๊ธฐ๋Šฅ,์‹คํ–‰ ํƒ€์ด๋ฐ ๋ชจ๋‘ ์ง์ ‘ ์„ค์ •

โœ… Break Point

  • ๋ฉˆ์ถฐ ์žˆ๋Š” ์ƒํƒœ
  • ์ฝ”๋“œ๋ฅผ ์›ํ•˜๋Š” ๊ณณ์—์„œ ํ•œ์ค„ํ•œ์ค„ ๋ฉˆ์ถฐ์„œ ํ™•์ธ
  • ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์Šค์™€์ดํ”„ํ•˜๋ฉด ์‚ฌ๋ผ์ง
  • ํด๋ฆญํ•˜๋ฉด ๋น„ํ™œ์„ฑํ™”
  •  

 ๋ˆ„๋ฅด๋ฉด ๋‹ค์Œ ๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ๋กœ ๋„˜์–ด๊ฐ

→ ํ† ๊ธ€ํ•ด์„œ ๋ชจ๋“  ๋ธŒ๋ ˆ์ดํฌ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™” ๊ฐ€๋Šฅ

→ ๋ชจ๋“  ๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ ํ•œ๋ฒˆ์— ํ™•์ธ

โœ… ํ•œ swiftํŒŒ์ผ์— ์—ฌ๋Ÿฌ๊ฐœ class

  • ๋ช‡ ๋ฐฑ๊ฐœ ํด๋ž˜์Šค๊ฐ€ ํ•œ ํŒŒ์ผ์— ์žˆ์–ด๋„ ์ƒ๊ด€ ์—†์Œ.
  • ํ•˜์ง€๋งŒ ๋ˆˆ์— ์ž˜ ๋ณด์ด๊ธฐ ์œ„ํ•ด ๋ณดํ†ต ํ•œ ํŒŒ์ผ์— ํ•œ ํด๋ž˜์Šค

โœ… ๋ผ๋ฒจ ๊ธ€์ž ์ค„ ์ˆ˜ ๋ฌด์ œํ•œ์œผ๋กœ ์“ฐ๊ธฐ

resultLabel.numberOfLines = 0 

โœ… General : Build Setting์˜ ๊ฐ„ํŽธ ๋ณด๊ธฐ ๋ฒ„์ „

General

Build Setting

โœ… ํ…์ŠคํŠธ ํ•„๋“œ ํ…์ŠคํŠธ ๋น„์šฐ๊ธฐ

โœ… ๋ฐ”ํƒ• ๋ทฐ ๋ˆ„๋ฅด๋ฉด ํ‚ค๋ณด๋“œ ๋‚ด๋ ค๊ฐ€๊ฒŒ ํ•˜๊ธฐ

  1. ์›ํ•˜๋Š” ๊ณณ์— Tap Gestrue Recognizer ์ถ”๊ฐ€ (์ง€๊ธˆ์€ ๋ฐ”ํƒ• View)Tap Gesture Recognizer์ถ”๊ฐ€ ๋œ ๋ชจ์Šต

2. @IBAction ์—ฐ๊ฒฐ

3. ์•ก์…˜ํ•จ์ˆ˜์— ๋ทฐ ํŽธ์ง‘ ์ƒํƒœ ์ข…๋ฃŒํ•˜๋Š” ์ฝ”๋“œ ์ถ”๊ฐ€

โœ… Could not insert new action connection ์˜ค๋ฅ˜

→๊ฐ•์ข… ํ›„ ํ•ด๊ฒฐ

๊ฐ•์ข…์€ Command+Q ํ•˜๋ฉด ํŽธํ•จ

โœ… Outlet Collection

์•„๋ž˜์™€ ๊ฐ™์ด ์„ ์–ธํ•œ ํ›„ (์Šค๋ณด์—์„œ ๋ผ๋ฒจ ๋Œ์–ด์™€์„œ ์„ ์–ธํ•˜๋‹ˆ๊นŒ ์˜ค๋ฅ˜๋‚จ;; ์•„๋ž˜์ฒ˜๋Ÿผ ์ฝ”๋“œ๋กœ ์„ ์–ธํ•ด๋„ ์—‘์ฝ” ๊ป๋‹ค ํ‚ค๋‹ˆ๊นŒ ๊ฒจ์šฐ ๋จ. ์  ๊นŒ๋‹ค๋กœ์šด๋„˜ …)

์Šคํ† ๋ฆฌ๋ณด๋“œ์˜ ๊ฐ ๋ผ๋ฒจ๋“ค์— ๋Œ์–ด ๋†“๊ธฐ (์„ธ ๋ฒˆ ์ถ”๊ฐ€)

์ž˜ ์ ์šฉ ๋จ

โœ… ํ•จ์ˆ˜์— ๋งค๊ฐœ๋ณ€์ˆ˜ ์ถ”๊ฐ€ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ

outletName :์™ธ๋ถ€ ๋งค๊ฐœ๋ณ€์ˆ˜

name: ๋‚ด๋ถ€ ๋งค๊ฐœ๋ณ€์ˆ˜

์™ธ๋ถ€ ๋งค๊ฐœ๋ณ€์ˆ˜ ์•ˆ ์“ฐ๋Š” ๋ฒ• - ์™€์ผ๋“œ์นด๋“œ ์‹๋ณ„์ž(_) ์‚ฌ์šฉ

์šฉ์–ด ์ •๋ฆฌ

  • ๋งค๊ฐœ๋ณ€์ˆ˜(Parameter) : ์ „๋‹ฌ์ธ์ž๋ฅผ ๋ฐ›์„ ๋ณ€์ˆ˜. ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ํ‘œํ˜„ํ•˜๋Š” ๋ง
    • ์™ธ๋ถ€ ๋งค๊ฐœ๋ณ€์ˆ˜ (Argument Label)
    • ๋‚ด๋ถ€ ๋งค๊ฐœ๋ณ€์ˆ˜ (Parameter name)
  • ์ „๋‹ฌ์ธ์ž(Argument) : ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ ์‹ค์งˆ์ ์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ๊ฐ’, ์ „๋‹ฌ ํ•˜๋Š” ๊ฐ’ (์‹œ์‹œ๊ฐ๊ฐ ๋ณ€๋™)

โœ… Alert ์ฝ”๋“œ

 	let alert = UIAlertController(title: "์ด๊ณณ์ด ํƒ€์ดํ‹€์ž…๋‹ˆ๋‹ค", message: "์ด๋Ÿฌ์ฟต ์ €๋Ÿฌ์ฟต ๋‚ด์šฉ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”!", preferredStyle: .alert)
        let cancel = UIAlertAction(title: "์ทจ์†Œ", style: .cancel)
        let ok = UIAlertAction(title: "ํ™•์ธ", style: .default)
        alert.addAction(cancel)
        alert.addAction(ok)
        present(alert, animated: true)

 

'SeSAC' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[iOS] TIL_230728  (0) 2023.08.01
[iOS] TIL_230727  (0) 2023.07.31
[iOS] TIL_230726  (0) 2023.07.31
[iOS] TIL_230725  (0) 2023.07.30
[iOS] TIL_230718  (0) 2023.07.20