๐Ÿ“ฑ [SwiftUI] Color: ์ƒ‰์ƒ ์„ค์ • ๋ฐฉ๋ฒ•

์ด์„œยท2023๋…„ 10์›” 3์ผ
0

๐Ÿ“ฑ SwiftUI ํŠธ๋ž™

๋ชฉ๋ก ๋ณด๊ธฐ
3/7

๐ŸŽ๏ธ๐Ÿ’จย ์•ˆ๋…•ํ•˜์„ธ์š”, ์ด์„œ์ž…๋‹ˆ๋‹ค! ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” SwiftUI์—์„œ Color๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ด์š”.

๊ฐœ์š”

SwiftUI์—์„œ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ Color๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”. ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” Color ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ์ƒ‰์ƒ์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜, ์‚ฌ์šฉ์ž ์ •์˜ ์ƒ‰์ƒ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”. ๋˜ํ•œ SwiftUI๋Š” ๋‹คํฌ ๋ชจ๋“œ์™€ ๊ฐ™์€ ํ…Œ๋งˆ ๋ณ€ํ™”์— ์ž๋™์œผ๋กœ ๋Œ€์‘ํ•˜๋ฏ€๋กœ ์•ฑ์˜ ์™ธ๊ด€์„ ์œ ์—ฐํ•˜๊ฒŒ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์–ด์š” ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋‹ค์–‘ํ•œ Color ๊ด€๋ จ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณผ๊ฒŒ์š”.

๊ธฐ๋ณธ ์ƒ‰์ƒ

Color ๊ตฌ์กฐ์ฒด๋Š” ์ต์Šคํ…์…˜(extension)์„ ํ†ตํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ธฐ๋ณธ ์ƒ‰์ƒ๋“ค์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์–ด์š”. ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์–ด๋– ํ•œ ์ƒ‰์ƒ๋“ค์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๊ณ  ์žˆ๋Š”์ง€ ๊ฐ€๋ณ๊ฒŒ ์‚ดํŽด๋ณด์„ธ์š”.

์šฐ๋ฆฌ๋Š” ์œ„์—์„œ ์ œ๊ณตํ•˜๋Š” ์ปฌ๋Ÿฌ๋ฅผ ํ†ตํ•ด ์†์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด ๋„ํ˜•์˜ ์ƒ‰์ƒ์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”.

RoundedRectangle(cornerRadius: 20)
	.fill(.blue)
	.frame(width: 100, height: 100)

๐Ÿ’กย fill ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด Color๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” fill(_:style:) ๋ฉ”์„œ๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ์–ด์š”. content๊ฐ€ ์ œ๋„ค๋ฆญ S๋ฅผ ๋ฐ›๊ณ  ์žˆ๋Š”๋ฐ, S๋Š” ShapeStyle ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์ œ์•ฝ์‚ฌํ•ญ์ด ์žˆ์–ด์š”. ์ด ๋•Œ Color๋Š” ShapeStyle ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๊ณ  ์žˆ์–ด ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ๊ฑฐ์—์š”.

์‚ฌ์šฉ์ž ์ •์˜ ์ƒ‰์ƒ

Color(red:green:blue)

Color(red:green:blue:)๋Š” SwiftUI์—์„œ ์‚ฌ์šฉํ•˜๋Š” Color(์ƒ‰์ƒ)๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ƒ์„ฑ์ž(constructor) ์ค‘ ํ•˜๋‚˜์—์š”. ์ด ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ง€์ • ์ƒ‰์ƒ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”.

  • red, green, blue๋Š” 0์—์„œ 1 ์‚ฌ์ด์˜ ๋ถ€๋™ ์†Œ์ˆ˜์  ๊ฐ’์œผ๋กœ ์ƒ‰์ƒ์„ ์ •์˜ํ•ด์š”. ์ด ๊ฐ’๋“ค์€ ๊ฐ๊ฐ ๋นจ๊ฐ„์ƒ‰, ๋…น์ƒ‰ ๋ฐ ํŒŒ๋ž€์ƒ‰ ์ฑ„๋„์˜ ๊ฐ•๋„๋ฅผ ๋‚˜ํƒ€๋‚ด์š”.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, Color(red: 1.0, green: 0.0, blue: 0.0)์€ ์™„์ „ํ•œ ๋นจ๊ฐ„์ƒ‰์„ ๋‚˜ํƒ€๋‚ด์š”.
  • ๋˜ํ•œ, ๊ฐ ์ƒ‰์ƒ ์ฑ„๋„์€ 0์—์„œ 255 ์‚ฌ์ด์˜ ์ •์ˆ˜ ๊ฐ’ ๋Œ€์‹ ์— 0์—์„œ 1 ์‚ฌ์ด์˜ ๋ถ€๋™ ์†Œ์ˆ˜์  ๊ฐ’์œผ๋กœ ํ‘œํ˜„๋ผ์š”.
RoundedRectangle(cornerRadius: 20)
	.fill(Color(red: 0.5, green: 0.4, blue: 0.6))
	.frame(width: 100, height: 100)

Assets.xcassets

Assets.xcassets์—์„œ ์ƒ‰์ƒ์„ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ• ๋˜ํ•œ ์žˆ์–ด์š”. ํ•ด๋‹น ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด, ์•ฑ์˜ ์ƒ‰์ƒ์„ ํ”„๋กœ์ ํŠธ ์ž์ฒด์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์–ด ์ถ”์ฒœํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์—์š”. Color Set์„ ์„ค์ •ํ•˜๋ฉด ๋‹คํฌ ๋ชจ๋“œ ์ƒ‰์ƒ ๋˜ํ•œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”.

  1. Xcode ํ”„๋กœ์ ํŠธ์—์„œ Assets.xcassets ํŒŒ์ผ์„ ํด๋ฆญํ•ด์ฃผ์„ธ์š”.

  1. ์™ผ์ชฝ์˜ ํŒจ๋„์—์„œ ์šฐํด๋ฆญํ•˜์—ฌ New Color Set์„ ํด๋ฆญํ•ด์ฃผ์„ธ์š”.

  1. ์›ํ•˜์‹œ๋Š” ์ƒ‰์ƒ ์ด๋ฆ„์„ ์„ค์ •ํ•ด์ฃผ์‹œ๊ณ  Any Appearance๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š”.

  1. ์˜ค๋ฅธ์ชฝ์˜ Color ํŒจ๋„์—์„œ Conent๋ฅผ sRGB๋กœ ์„ ํƒํ•ด์ฃผ์‹œ๊ณ  HEX ๋ถ€๋ถ„์— ์›ํ•˜๋Š” ์ƒ‰์ƒ ์ปฌ๋Ÿฌ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.

Dark๋„ ๋™์ผํ•˜๊ฒŒ ์›ํ•˜๋Š” ์ปฌ๋Ÿฌ๋กœ ์„ค์ •ํ•ด์ค˜์š”.
์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ์ •์˜ํ•œ ์ƒ‰์ƒ์„ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์–ด์š”!

์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ์ •์˜ํ•œ ์ƒ‰์ƒ ์ด๋ฆ„์„ Color ์ƒ์„ฑ์ž์˜ ์ธ์ž๋กœ ๋„˜๊ฒจ์ฃผ๋ฉด ๋ผ์š”๐Ÿ˜†.

RoundedRectangle(cornerRadius: 20)
  .fill(Color("MyColor"))
  .frame(width: 100, height: 100)

๋ผ์ดํŠธ ๋ชจ๋“œ์™€ ๋‹คํฌ ๋ชจ๋“œ์—์„œ ๋ชจ๋‘ ์šฐ๋ฆฌ๊ฐ€ ์ง€์ •ํ•œ ์ƒ‰์ƒ์ด ๋ฐ˜์˜๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

๋‹คํฌ ๋ชจ๋“œ ์ „ํ™˜ Tip

  1. ๐Ÿ’ก ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๋‹คํฌ๋ชจ๋“œ ์ „ํ™˜ ๋ฐฉ๋ฒ•: Commnad + Shift + A

  2. ๐Ÿ’ก SwiftUI Preview์—์„œ ๋‹คํฌ๋ชจ๋“œ ์ „ํ™˜ ๋ฐฉ๋ฒ•

  1. SwiftUI ์ฝ”๋“œ๋กœ ๋‹คํฌ ๋ชจ๋“œ ์ „ํ™˜ ๋ฐฉ๋ฒ•: .preferredColorScheme(.dark)

๋งˆ๋ฌด๋ฆฌ

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ๊ธฐ๋ณธ ์ƒ‰์ƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ •์˜ ์ƒ‰์ƒ ๊ทธ๋ฆฌ๊ณ  ๋‹คํฌ๋ชจ๋“œ์— ๋Œ€์‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜์–ด์š”. ์ถ”๊ฐ€๋กœ ๋‹คํฌ ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ฟ€ํŒ๋“ค๊นŒ์ง€ ์ž‘์„ฑํ•ด ๋†“์•˜์œผ๋‹ˆ ์ž˜ ์ฐธ๊ณ ํ•˜์‹œ์–ด ๊ฐœ๋ฐœ์— ๋งŽ์€ ๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ผ์š” ๐Ÿ˜†!

profile
๐ŸŽ๏ธ๐Ÿ’จ Beep Beep

0๊ฐœ์˜ ๋Œ“๊ธ€