Y J S

Figma ์‹œ์•ˆ ์ •๋ฐ€ ๋Œ€์‘์„ ์œ„ํ•œ ์ปค์Šคํ…€ ์Šฌ๋ผ์ด๋” ๊ตฌํ˜„

๋ฌธ์ œ ์ƒํ™ฉ

  • ๋””์ž์ด๋„ˆ๊ฐ€ ์ œ๊ณตํ•œ Figma ์‹œ์•ˆ ๊ธฐ์ค€์œผ๋กœ ์Šฌ๋ผ์ด๋” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  react-native-community/slider๋ฅผ ์‚ฌ์šฉํ–ˆ์œผ๋‚˜, Thumb(์กฐ์ ˆ ํ•ธ๋“ค)๊ณผ ํŠธ๋ž™ ์œ„ ํฌ์ธํŠธ์˜ ์œ„์น˜๊ฐ€ Figma์™€ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ.
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜ต์…˜์„ ์กฐ์ •ํ•ด๋„ ๋ฏธ์„ธํ•œ ์ •๋ ฌ ์˜ค์ฐจ๋ฅผ ํ•ด์†Œํ•˜๊ธฐ ์–ด๋ ค์›Œ, ํ”ฝ์…€ ๋‹จ์œ„ ์ •๋ฐ€ ๋งค์นญ์ด ํ•„์š”ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•จ.

ํ™˜๊ฒฝ

  • ํ”„๋กœ์ ํŠธ: ๋ชจ๋ฐ”์ผ UI ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„
  • ์Šคํƒ: React Native, TypeScript
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‹œ๋„: react-native-community/slider

์ฆ์ƒ/๋กœ๊ทธ

์‹œ๊ฐ์  ์ •๋ ฌ ๋ฌธ์ œ: Thumb ์ค‘์‹ฌ๊ณผ ํŠธ๋ž™ ์ƒ์˜ ๊ธฐ์ค€ ์ (๋งˆ์ปค) ์œ„์น˜๊ฐ€ Figma์™€ 1~์ˆ˜ px ๋‹จ์œ„๋กœ ๋ถˆ์ผ์น˜.
๊ฐœ๋ฐœ/๋นŒ๋“œ ์—๋Ÿฌ ๋กœ๊ทธ๋Š” ์—†๊ณ , ๋ Œ๋”๋ง ๊ฒฐ๊ณผ์˜ ์‹œ๊ฐ์  ์˜ค์ฐจ๊ฐ€ ํ•ต์‹ฌ ์ด์Šˆ.

์›์ธ ๋ถ„์„

  • ๋ฒ”์šฉ ์Šฌ๋ผ์ด๋” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋‚ด๋ถ€ ๋ ˆ์ด์•„์›ƒ, ์ตœ์†Œ ํ„ฐ์น˜ ์˜์—ญ(hitSlop), ํŠธ๋ž™ ๋†’์ด/ํŒจ๋”ฉ ์ฒ˜๋ฆฌ ๋“ฑ์œผ๋กœ ์ธํ•ด Thumb ์ค‘์‹ฌ ์ขŒํ‘œ ๊ณ„์‚ฐ์ด ๋””์ž์ธ ๋ช…์„ธ์™€ 1:1 ๋งค์นญ๋˜๊ธฐ ์–ด๋ ค์›€.
  • ์—์…‹์˜ ์‹œ๊ฐ์  ์ค‘์‹ฌ(visual center)๊ณผ ์‹ค์ œ ๋ฐ”์šด๋”ฉ ๋ฐ•์Šค ์ค‘์‹ฌ ๋ถˆ์ผ์น˜๋กœ, ๋™์ผ ์ขŒํ‘œ์—์„œ๋„ ์‚ฌ์šฉ์ž ๋ˆˆ์—๋Š” ์–ด๊ธ‹๋‚˜ ๋ณด์ด๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒ.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  1. Figma ๊ธฐ์ค€ ์ •๋ฐ€ ์น˜์ˆ˜ ํ™•์ •
    • ํŠธ๋ž™ ๋†’์ด, ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํญ, Thumb ์‹ค์ธก ์ง€๋ฆ„ ๋ฐ ๊ธฐ์ค€์„ , ํŠธ๋ž™ ํฌ์ธํŠธ(๋งˆ์ปค) ์ขŒํ‘œ๋ฅผ px ๋‹จ์œ„๋กœ ๋ช…ํ™•ํžˆ ๊ณ„์ธก.
    • ํ•„์š”ํ•œ ์—์…‹(Thumb/ํŠธ๋ž™/๋งˆ์ปค)์„ ํ•ด์ƒ๋„๋ณ„(1x/2x/3x)๋กœ ์žฌ์ˆ˜์ถœํ•˜๋ฉฐ ์—ฌ๋ฐฑ์„ ํ†ต์ผ.
  2. ๊ฐ’-ํ”ฝ์…€ ๋งคํ•‘ ๊ณต์‹ ๊ณ ์ •
    • ์œ ํšจ ํŠธ๋ž™ ๊ธธ์ด(usableWidth)์—์„œ ์ขŒ์šฐ ์˜คํ”„์…‹(ํŒจ๋”ฉ)์„ ์ œ์™ธํ•˜๊ณ , ( position = ((value - min) / (max - min)) * usableWidth + offset )์œผ๋กœ Thumb ์ขŒํ‘œ๋ฅผ ๊ฒฐ์ •.
    • step์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๋“œ๋ž˜๊ทธ ๊ฐ’์„ step ๋‹จ์œ„๋กœ ์Šค๋ƒ…(snap) ์ฒ˜๋ฆฌ ํ›„ ์ขŒํ‘œ ๋ณ€ํ™˜.
  3. ์ œ์Šค์ฒ˜ ์ฒ˜๋ฆฌ ์ง์ ‘ ๊ตฌํ˜„
    • Pan ์ œ์Šค์ฒ˜๋กœ ๋“œ๋ž˜๊ทธ ์ด๋™ โ†’ ๊ฐ’ ํ™˜์‚ฐ โ†’ ์ขŒํ‘œ ๊ฐฑ์‹ ์„ ๊ตฌํ˜„ํ•˜๊ณ , ๋ฒ”์œ„ ๋ฐ– ์ด๋™์€ ํด๋žจํ”„(clamp).
  4. ์‹œ๊ฐ ์ค‘์‹ฌ ๋ณด์ •(visual centering)
    • Thumb/๋งˆ์ปค ์ด๋ฏธ์ง€์˜ ์‹œ๊ฐ ์ค‘์‹ฌ์ด ์ˆ˜ํ•™์  ์ค‘์‹ฌ๊ณผ ๋‹ค๋ฅผ ๊ฒฝ์šฐ, ๋ณด์ • ์˜คํ”„์…‹์„ ๋ณ„๋„๋กœ ๋‘์–ด 1:1๋กœ ๋งž์ถค.
  5. ์ ‘๊ทผ์„ฑ/์‚ฌ์šฉ์„ฑ ๋ฐ˜์˜
    • ํ„ฐ์น˜ ์˜์—ญ ํ™•์žฅ(hitSlop), ํฌ์ปค์Šค ๊ฐ€๋Šฅ, ์ ‘๊ทผ์„ฑ ๋ ˆ์ด๋ธ”/๊ฐ’ ์ฝ๊ธฐ ๋“ฑ UX ์š”์†Œ๋ฅผ ์ปค๋ฒ„.

๊ฒ€์ฆ

  • Figma ์Šคํฌ๋ฆฐ์ƒท์„ ๋ฐ˜ํˆฌ๋ช… ์˜ค๋ฒ„๋ ˆ์ดํ•˜์—ฌ ํ”ฝ์…€ ๋‹จ์œ„๋กœ ์˜ค์ฐจ๋ฅผ ํ™•์ธํ•˜๊ณ , ์ฃผ์š” ๊ตฌ๊ฐ„(์ตœ์†Œ/์ค‘๊ฐ„/์ตœ๋Œ€ ๊ฐ’, ๋งˆ์ปค ์ง€์ )์—์„œ ์žฌ๊ฒ€์ฆ.
  • ๋‹ค์–‘ํ•œ ํ•ด์ƒ๋„/๋ฐ€๋„์—์„œ ์Šค๋ƒ… ๋ฐ ํŠธ๋ž™/Thumb ์ •๋ ฌ์ด ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜๋Š”์ง€ ์ ๊ฒ€.

๋ฐฐ์šด ์ 

  • ํŠน์ • UI์—์„œ "์ •ํ™•ํ•œ ํ”ฝ์…€ ๋งค์นญ"์ด ํ•ต์‹ฌ ์š”๊ตฌ์ผ ๊ฒฝ์šฐ, ๋ฒ”์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŠœ๋‹๋ณด๋‹ค ์ปค์Šคํ…€ ๊ตฌํ˜„์ด ๋” ๋น ๋ฅด๊ณ  ํ™•์‹คํ•  ์ˆ˜ ์žˆ์Œ.
  • ๊ฐ’-ํ”ฝ์…€ ๋ณ€ํ™˜์„ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜๊ณ , ์—์…‹์˜ ์‹œ๊ฐ ์ค‘์‹ฌ์„ ๋ณด์ •ํ•˜๋ฉด ๋ฏธ์„ธํ•œ ์ •๋ ฌ ์ด์Šˆ๋ฅผ ๊ตฌ์กฐ์ ์œผ๋กœ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Œ.
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์„ฑ์„ ์ค„์ด๋ฉด ์žฅ๊ธฐ์ ์œผ๋กœ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์ž์œ ๋„๊ฐ€ ๋†’์•„์ง.