Deep_Dev
article thumbnail

๐Ÿ“Œ AutoLayout : Graph_Animated 

๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์• ๋‹ˆ๋ฉ”์ด์…˜

 

 

 

 


 

์ค‘์•™์— ๋ณด์ด๋Š” ๋ง‰๋Œ€ํ˜• Graph Layout์„ ๋งŒ๋“ค์–ด๋ณด๋Š”๊ฒƒ์ด๋‹ค.

 

 

View ์•ˆ์— View๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ง‰๋Œ€๋ฅผ ๋งŒ๋“ค๊ณ 

 

๋ง‰๋Œ€ ํ•˜๋‚˜๋ฅผ ์šฐํด๋ฆญํ•˜์—ฌ ์ƒ์œ„View์˜ 'Equals Height' ์„ค์ •ํ•˜๊ณ 

 

Structure์— ๋ณด์ด๋“ฏ์ด ์ƒ์œ„ View ~ ๋ง‰๋Œ€ View 6๊ฐœ๋ฅผ ๋ชจ๋‘ ์„ ํƒํ•˜์—ฌ 'Equal Height' ์„ค์ •

 

 

6๊ฐœ ๋ง‰๋Œ€View๋งŒ ์„ ํƒํ•˜์—ฌ Equal Widths๋กœ ๋„“์ด๋ฅผ ๊ฐ™๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค.

 

 

ํ•˜๋‚˜ํ•˜๋‚˜์˜ ๋ง‰๋Œ€ View์˜ ๋†’์ด๋Š” 

 

Equal Height to ์˜ Multiplier๋ฅผ ์กฐ์ ˆํ•ด์ค€๋‹ค.

 


ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ๊นŒ์ง€๋Š” Multiplier๋ฅผ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด์ง€๋งŒ, 

์‚ฌ์šฉ์žํ•œํ…Œ ์ž…๋ ฅ์„ ๋ฐ›๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด์„œ ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’์œผ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ์œ„ํ•ด์„ 

 

์ด๊ฒƒ์„ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

 

์ด๋Ÿฌํ•œ AutoLayout์€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผ ํ• ๊นŒ ? 

 

 

๊ฐ ๋ง‰๋Œ€View์˜ Height ์†์„ฑ์„ Outlet์œผ๋กœ ์ง€์ •ํ•ด์ค€๋‹ค.

( Outlet ๋ช… : graph1~6Height )

 

 

๋ณด๊ธฐ์™€ ๊ฐ™์ด constant, priority ์™€ ๊ฐ™์€ ์†์„ฑ์€ ์ฝ”๋“œ์—์„œ ๋ฐ”๋กœ ์ž…๋ ฅ๋ฐ›์„ ์ˆ˜ ์žˆ์ง€๋งŒ,

๋น„์œจ์ธ Multiplier๋Š” ๋ฐ”๋กœ ์ž…๋ ฅ๋ฐ›์„ ์ˆ˜ ์—†๋‹ค.

 

๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด Constraint ์ž์ฒด๋ฅผ ๋งŒ๋“ค์–ด์ค˜์•ผํ•œ๋‹ค.

 

 

์ดํ›„ viewDidload() ์—์„œ ์ ์šฉ์‹œ์ผœ์ฃผ๋ฉด ๋œ๋‹ค.

 

์ „์ฒด์ฝ”๋“œ

 

 

ํ˜„์žฌ๊นŒ์ง€ ์‹คํ–‰๊ฒฐ๊ณผ

 


์ดํ›„, ๋ฒ„ํŠผ ํด๋ฆญ์‹œ ๋ฒ„ํŠผ๋งˆ๋‹ค ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„๊ฐ€ ๋ฐ”๋€Œ๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ? 

 

Button์„ ์ถ”๊ฐ€ํ•œ ๋’ค์— ์ฝ”๋“œ๋ฅผ ์กฐ๊ธˆ๋งŒ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

 

์ฒซ๋ฒˆ์งธ๋กœ changeConstraint ๋ฉ”์†Œ๋“œ์˜ ๋งˆ์ง€๋ง‰(70 Line)์— 

 

return newConstraint ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

 

์ด๋Š” ์ƒˆ๋กœ์šด newConstraint๊ฐ’์„ ๊ณ„์† ๋ฐ˜ํ™˜์‹œ์ผœ์ฃผ๊ธฐ์œ„ํ•จ์ด๋‹ค.

 

 

 

์ดํ›„ ์Šคํ† ๋ฆฌ๋ณด๋“œ์— ๋ฒ„ํŠผ 2๊ฐœ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ IBAction์„ ๋งŒ๋“ค๊ณ ๋‚˜์„œ,

 

viewDidLoad()์— ์ป๋˜ ์ฝ”๋“œ๋ฅผ ์˜ฎ๊ฒจ์ค€๋‹ค.

 

์ฝ”๋“œ๊ฐ€ ์•ฝ๊ฐ„ ๋ฐ”๊ผˆ๋Š”๋ฐ, 

 

ํ•ด๋‹น์ฝ”๋“œ๋Š” ์œ„์—์„œ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์‚ฌ์šฉํ–ˆ๋˜ ๊ฐ’์€ deactive ํ•˜๊ณ  ์ƒˆ๋กœ active๋ฐ›์•„์„œ

ํ•ญ์ƒ ์ƒˆ๋กญ๊ฒŒ ํ•˜์—ฌ ์ถฉ๋Œ๋‚˜์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ( ๊ณ„์† return ๋ฐ›์Œ )

 

 

 

 

 

์ดํ›„ ๊ทธ๋ž˜ํ”„์˜ ๋ณ€ํ™”๊ฐ€ ๋ณด์ด๊ฒŒ animation ํšจ๊ณผ๋ฅผ ์ฃผ๋ฉด ๋” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ฐ”๋€๋‹ค.

 

 

layout.IfNeeded()

withDuration 0.5 -> 0.5์ดˆ๋™์•ˆ ์‹ค์‹œ๊ฐ„์œผ๋กœ layout์„ ์ ์šฉ์‹œ์ผœ๋ผ ๋ผ๋Š”๊ฒƒ์ด๋‹ค.

๐Ÿ’ก layout.IfNeeded()

1. layoutIfNeeded()๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด, UI๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋ผ๋Š” queue์— ๋’ท์ชฝ์— ๋„ฃ๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋งจ ์•ž์ชฝ์— ๋„ฃ์–ด์„œ ๊ณง๋ฐ”๋กœ UI๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ• ์ˆ˜์žˆ๋Š” ๋ฉ”์†Œ๋“œ
2. ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด Update Cycle์„ ๋ฐ”๋กœ ์‹คํ–‰ํ•˜์—ฌ ๋ ˆ์ด์•„์›ƒ์ด ์ฆ‰๊ฐ์ ์œผ๋กœ ์ ์šฉ
3. layoutSubviews()๋Š” ๋‚ด๋ถ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์˜ํ•ด ์ตœ์ ํ™”๋˜์–ด ์žˆ๊ธฐ๋•Œ๋ฌธ์— ๋ช…์‹œ์ ์œผ๋กœ ๋ถˆ๋ฆฌ๋ฉด ์•ˆ๋˜๋ฏ€๋กœ ์• ํ”Œ์—์„œ๋Š” layoutIfNeeds() ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด layoutSubviews() ๋ฉ”์†Œ๋“œ๊ฐ€ ๊ฐ„์ ‘์ ์œผ๋กœ ๋น ๋ฅด๊ฒŒ ๋ถˆ๋ฆฌ๋„๋ก ์„ค๊ณ„

 

 

์™„์„ฑ ๊ฒฐ๊ณผ