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

study iOS๐ŸŽ/์ฃผ์ ‘ iOS - iOS ํ…Œ๋งˆ

[๊พธ์ค€i-OS] alignment rectangle( ์‰ฌ์šด ์„ค๋ช…, easy-explained )

0. ์„ค๋ช… ์ „ ํŒ๊น”๊ธฐ

์šฐ์„  ์˜คํ† ๋ ˆ์ด์•„์›ƒ์„ ์“ฐ๋Š” ์ด์œ ๊ฐ€ ๋ญ์˜€์ฃ ?

 

 ์ ˆ๋Œ€์ ์ธ ์ขŒํ‘œ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€, ๋งˆ์น˜ ์Šคํฌ๋ฆฐ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๋ฏธ๋ฆฌ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์“ฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋งŒ์•ฝ, ์•„์ดํฐ7์˜ ์ขŒํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋งŒ๋“  ์•ฑ์ด ์•„์ดํฐ 11ํ”„๋กœ ๋˜๋Š” ๋žœ๋“œ์Šค์ผ€์ดํ”„ ๋ชจ๋“œ์˜ ์•„์ดํŒจ๋“œ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค๋ฉด, ๋‹น์—ฐํžˆ ๋งค์šฐ ์ž‘๊ฒŒ ๋ณด์ผ ๊ฑฐ๊ณ , ํ™”๋ฉด์— ๋ ˆ์ด์•„์›ƒ์ด ์ด์ƒํ•˜๊ฒŒ ์žกํžˆ๊ฒ ์ฃ . 

 

 ์ €๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, UIView์˜ frame์ด ๋Ÿฐํƒ€์ž„ ๋™์•ˆ์— ๊ณ„์‚ฐ๋˜๋ฉด์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ์Šคํฌ๋ฆฐ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ณ ๋ คํ•ด์„œ ๊ฒฐ์ •๋  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด autolayout์ž…๋‹ˆ๋‹ค. 

 

 ๋œฌ๊ธŠ์—†์ด ์˜คํ† ๋ ˆ์ด์•„์›ƒ์ด ์™œ ๋‚˜์˜ค๋ƒ๊ตฌ์š”?

 

 ์˜คํ† ๋ ˆ์ด์•„์›ƒ์ด ๋ฐ”๋กœ ์˜ค๋Š˜ ๋‹ค๋ฃฐ ์ฃผ์ œ์ธ Alignment Rectangle์„ ๊ธฐ์ค€์œผ๋กœ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 

 

1. ๋„๋Œ€์ฒด Alignment Rectangles ? ๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”? ( ์˜์–ด ์ฃผ์˜, ๋ฐ”๋กœ ํ•œ๊ตญ์–ด ๋‚˜์˜ค๋‹ˆ๊นŒ ๋‚˜๊ฐ€์ง€ ๋งˆ์„ธ์š” !! )

As developers create complex views, they may introduce visual ornamentation such as shadows, exterior highlights, reflections, and engraving lines. As they do, these features are often drawn onto p_w_picpath art rather than being added through layers or subviews. Unlike frames, a view’s alignment rectangle should be limited to a core visual element. Its size should remain unaffected as new items are drawn onto the view. Consider the left side of Figure 1-11. It shows a view drawn with a shadow and a badge. When laying out this view, you want Auto Layout to focus on aligning just the core element—the blue rectangle—and not the ornamentation.

ํ•œ UIView์— ์ถ”๊ฐ€๋œ, ๊ทธ๋ฆผ์ž ํšจ๊ณผ, ๋ฑƒ์ง€ ๋“ฑ๋“ฑ, ์™ผ์ชฝ๋ถ€ํ„ฐ ๊ทธ๋ฆผ1, ๊ทธ๋ฆผ2, ๊ทธ๋ฆผ3

(์ถœ์ฒ˜ : blog.51cto.com/linjohn/1670691 )

 

 ์ถ”๊ฐ€์ ์ธ ๋น„์ฅฌ์–ผ์ ์ธ ์žฅ์‹์ด ์—†๋Š” ๋ทฐ๋ฅผ ๋งŒ๋“ค๋ฉด frame <-> alignment rectangle์€ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๊ทธ ๋ทฐ์— ๊ทธ๋ฆผ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, highlight๋ฅผ ์ฃผ๊ฑฐ๋‚˜, ๋ฑƒ์ง€๋ฅผ ๋‹ฌ๊ฑฐ๋‚˜ ํ•  ๋•Œ, ๋‘˜์€ ์„œ๋กœ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. 

 

 ๊ทธ๋ฆผ2์˜ ๊ฒ€์€ ์ง์‚ฌ๊ฐํ˜•์œผ๋กœ ํ‘œ์‹œ๋œ ๊ฒŒ ์›๋ž˜ ๋ทฐ๋ผ๊ณ  ํ•ฉ์‹œ๋‹ค. ์ด๋•Œ, ๊ทธ๋ฆผ1์—์„œ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ๋ทฐ์—, ๊ทธ๋ฆผ์ž, ๋ฑƒ์ง€๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ์žˆ๋„ค์š”. ๊ทธ๋ ‡์ฃ ? ์ด๋Ÿฌํ•œ ๋ถ€๊ฐ€์  ๋น„์ฅฌ์–ผ ์žฅ์‹ ํšจ๊ณผ๋“ค์€, layer๋‚˜ subview๋กœ์„œ ์ถ”๊ฐ€๋˜์ง€ ์•Š๊ณ , p_w_picpath art๋กœ์„œ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, alignment rectangle์€ frame rectangle๊ณผ ๋‹ฌ๋ฆฌ, ์ด ๋ทฐ์˜ ์ƒ๋Œ€์  ์œ„์น˜ ๋ฐ ์‚ฌ์ด์ฆˆ๋ฅผ ์žก๋Š” ์˜คํ† ๋ ˆ์ด์•„์›ƒ์— ์“ฐ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ ๋ทฐ์˜ ํ•ต์‹ฌ ์‹œ๊ฐ ์š”์†Œ์—๋งŒ ์ง‘์ค‘ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๋ฆผ3 ์˜ ์˜์—ญ์ด frame rect. ๋ผ๊ณ  ํ•˜๋ฉด, ๊ทธ๋ฆผ2์˜ ์˜์—ญ์ด ๋ฐ”๋กœ ์˜ค๋Š˜ ๋‹ค๋ฃจ๋Š” alignment rect.์ด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค(๋ฌผ๋ก  ์ขŒํ‘œ์™€ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ฐ€์กŒ๊ฒ ์ฃ ).

 

์˜คํ†  ๋ ˆ์ด์•„์›ƒ์€ ๋ทฐ์˜ ์œ„์น˜์™€ ์‚ฌ์ด์ฆˆ ๊ธฐ์ค€์„ ๋ฐ”๋กœ ์ด alignment rect.๋กœ ์žก๊ณ  ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ, ์ž๊พธ, " ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ, ์ฆ‰, ๋ถ€๊ฐ€์  ์‹œ๊ฐ ์žฅ์‹์ด ์—†๋Š” ๊ฒฝ์šฐ, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ frame rect.์™€ alignment rect.๋Š” ์ผ์น˜ํ•œ๋‹ค"๋ผ๊ณ ๋“ค ํ•˜๋Š” ๊ฒƒ์ด์ฃ .

 

2. Alignment Rectangle์˜ ์ฃผ์š” ์†์„ฑ๋“ค

์˜ˆ์‹œ) UILabel(UIView)์˜ alignment rectangle์„ ๊ฒฐ์ •ํ•˜๋Š”, ๋ ˆ์ด์•„์›ƒ ์š”์†Œ๋“ค. ( ์ถœ์ฒ˜ : iOS Programming 7th, Aaron Hillegass )

 

Alignment Rectangle์˜ ๊ฒฐ์ •์ ์ธ ๋ ˆ์ด์•„์›ƒ ์†์„ฑ๋“ค

  ์—ฌ๊ธฐ์„œ ๋ถ€ํ„ด, ๊ทธ ์ €ํฌ๊ฐ€ ์˜คํ† ๋ ˆ์ด์•„์›ƒ ์„ค์ •ํ•  ๋•Œ ๋‚˜์˜ค๋Š” GUI์— ๋‚˜์˜ค๋Š” ๋‚ด์šฉ๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์ด ๊ธฐ์ค€์ด ๋ญ๋‹ค? ๋ฐ”๋กœ Alignment Rectangle์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ€ํ•ด์ง€๋Š” ๊ธฐ์ค€์ด๋‹ค๋ฅผ ๊ธฐ์–ตํ•ด์ฃผ์„ธ์š” !!

 

1. width, height

 

  ์‚ฌ์ด์ฆˆ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋‹น์—ฐํ•˜์ฃ .

 

2. top, bottom, left, right

 

  ํ•ด๋‹น UIView์˜ alignment์˜ top, bottom, left, right ๋ฐฉํ–ฅ ๋ชจ์„œ๋ฆฌ์™€, ๋‹ค๋ฅธ UIView์˜ alignment rectangle top, bottom, left, right ๋ชจ์„œ๋ฆฌ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

 

3. centerX, centerY

 

  ํ•ด๋‹น UIView alignment rectangle์˜ ์ค‘์•™์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. x์ถ•์—์„œ์˜ ์ค‘์•™ ์ขŒํ‘œ์™€ y์ถ•์—์„œ์˜ ์ค‘์•™ ์ขŒํ‘œ์š”.

 

4. FirstBaseline, LastBaseline

 

  ๋ณดํ†ต UIView์—์„œ, bottom๊ณผ ๋™์ผํ•œ ์†์„ฑ์ด๋‚˜, UITextField(UIView), Multiline Text Label, Text View์™€ ๊ฐ™์ด ํ…์ŠคํŠธ ์ž…๋ ฅ์ด ๋“ค์–ด๊ฐ€๋Š” UIView์ค‘ ์ผ๋ถ€์— ๋Œ€ํ•ด์„œ๋Š”, FirstBaseline, LastBaseline์€ alignment rectangle์˜ bottom์ด ์•„๋‹Œ, ๊ทธ๊ฒƒ์ด ๋ณด์—ฌ์ฃผ๋Š” ํ…์ŠคํŠธ์˜ ์ตœ๊ณ  ๋ฐ‘๋ถ€๋ถ„์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด์„œ, alignment rectangle์—์„œ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ๋Š” g, p์™€ ๊ฐ™์€ descender( a,b,c,d,e,f,g,p๋ฅผ ๋ณด์‹œ๋ฉด ์•„์‹œ๊ฒ ์ฃ . g,p์˜ ๊ธ€์ž์˜ ์ผ๋ถ€๋Š” ๋” ๋ฐ‘๋ถ€๋ถ„ ๊นŒ์ง€ ๊ฑธ์ณ์žˆ๋Š” ๊ฒƒ? ์ด๋Ÿฐ ๊ธ€์ž๋“ค์„ descender๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ) ๊นŒ์ง€ ํฌ๊ด„ํ•œ ์ตœ๊ณ  ๋ฐ‘๋ถ€๋ถ„์„ ๊ธฐ์ค€์œผ๋กœ ์‚ฐ์ •๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ๋ญ๊ฐ€ ์ข‹์ฃ ? ์™œ ์ด๋ ‡๊ฒŒ ๊นŒ์ง€ ํ•˜๋Š” ๊ฑธ๊นŒ์š”? ์ง„์งœ ...

  ๊ทธ๋Ÿผ ๋ฐ˜๋Œ€๋กœ ๋ฌป๊ฒ ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ alignment rectangle๊ธฐ์ค€์œผ๋กœ ๋ ˆ์ด์•„์›ƒ์„ ์„ค์ •ํ–ˆ๊ณ , ๋ฐ‘์— ๋งค์šฐ ๋ผ๋ฒจ์ด ์žˆ์—ˆ๋Š”๋ฐ p, g์˜ ๋ฐ‘์œผ๋กœ ๋” ๋‚ด๋ ค๊ฐ„ ๋ถ€๋ถ„์ด ๊ฒน์น˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•  ๊ฒ๋‹ˆ๊นŒ? ์•ฑ์ด ๋งค์šฐ ์—†์–ด ๋ณด์ผ ํ…๋ฐ์š” !!

  ๊ทธ๋ž˜์„œ ๋งŒ์•ฝ text view, multiline textlabel, UITextField์™€ ๊ฐ™์€ UIView์˜ Bottom๊ณผ ๋‹ค๋ฅธ UIView๋ฅผ ๋‹ค๋ฃฌ๋‹ค๋ฉด ๊ฐ„๊ฒฉ์„ ๋ญ˜ ๊ธฐ์ค€์œผ๋กœ ์ •ํ•ด์•ผ๋˜๊ฒŒ์š”? 

 ๋ฐ”๋กœ ์ด alignment rectangle์˜ baseline ์†์„ฑ์ž…๋‹ˆ๋‹ค.

 

 

5. Leading, Trailing

 

  left, right์™€ ๋Œ€๋ถ€๋ถ„ ๊ฐ™์œผ๋‚˜, ์‚ฌ์šฉ ์–ธ์–ด์— ๋Œ€ํ•œ ๋” ์„ธ๋ฐ€ํ•œ ์กฐ์ •์ด ๋˜์–ด์žˆ๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ, ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ฝ๋Š” ์–ธ์–ด์˜ ๊ฒฝ์šฐ( ์˜์–ด, ํ•œ๊ตญ์–ด, ์ค‘๊ตญ์–ด ๋“ฑ ๋Œ€๋ถ€๋ถ„ ) leading์ด left, trailing์ด right์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์•„๋ž์–ด?!์™€ ๊ฐ™์ด ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์—์„œ ์ฝํžˆ๋Š” ์–ธ์–ด์˜ ๊ฒฝ์šฐ, leading์ด right์™€ ๊ฐ™๊ณ , trailing์ด left์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

 

 

 

 

3. Outro

 ์ €๋Š” frame๋„ ๊ฒจ์šฐ ๋ญ”์ง€ ๊ฐ์„ ์ตํ˜€๊ฐ€๋Š” ๋ฐ,

alignment rectangle์ด ๋‚˜์˜ค์ž ๋งˆ์ž, ๋˜ ๋ญ์ง€? ๋ญ ์ด๋ฆฌ ์•Œ๊ฒŒ ๋งŽ์•„? ๋ผ๋Š” ์งœ์ฆ์ด ๋‚ฌ์Šต๋‹ˆ๋‹ค๋งŒ,

๋˜ ์–ด๋Š์ •๋„ ๋ฐฐ์šฐ๊ณ  ๋‚˜๋‹ˆ, ๋ณ„๋กœ ๋‹ค๋ฅด์ง€๋„ ์•Š๊ณ , ์ข€ ๊ธฐ๋ถ„์ด ๋‚˜์•„์กŒ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ, ์ œ๊ฐ€ ์ž˜๋ชป ์ดํ•ดํ•œ ๊ฒŒ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋Œ“๊ธ€์— ๋‚จ๊ฒจ์ฃผ์„ธ์š”.