์ฐธ๊ณ :
๋ง์ฐํ๊ฒ layoutIfNeeded() ๋ฅผ ์จ์์๋๋ฐ, ๋ณผ๋๋ง๋ค ์ ์ฌํด ๋ณด์ด๋ setNeedsLayout()์ ๋ญ๊น ์ถ์๋ค,
updateConstraints()๋ ๊ถ๊ธํ๊ณ , ๋น์ทํ ๋ค๋ฅธ๊ฒ๋ค๋ ๊ถ๊ธํ์ง๋ง, ์๋ฃ์ข ์ฐพ์๋ณด๋ ์ ๋์ด ๋น๊ตํ๋๊ฒ ๋ง์๊ธฐ์ ์ ๋ฆฌ!
Zedd
๋ ๋ธ๋ก๊ทธ๊ฐ ๋๋ฌด ์ ๋ฆฌ๊ฐ ์๋์ด์์ด์ ๊ธฐ๋ณธ์ ์ธ๊ฑด ๊ฐ๋จํ๊ฒ ์ค๋ช
ํ๊ณ , ์ดํด๋ ฅ์ด ๋ธ๋ ค ์ด์ง ๊ฐธ์ฐ๋ฑ ํ๋ ๋ถ๋ถ๋ค์ ์ ์ด์ผ๊ฒ ๋ค
๋ค์ด๊ฐ๊ธฐ์ ๋จผ์ ์์์ผ ์ดํด๊ฐ ๋๋๊ฒ!
Life cycle
์ค view layout์ update
ํด์ฃผ๋ ๋ถ๋ถ์ด ์๋ค๊ณ ํ๋ค! ๊ธ๋ค์ ๋ณด๋ layoutSubviews()
๊ฐ ๊ทธ ์ญํ ์ธ๊ฐ๋ณด๋ค. (Zedd๋ ๊ฐ์ฌํฉ๋๋ค)
๊ทผ๋ฐ ๋ง ๊ทธ๋๋ก, Cycle์ด๋ค, ํ๋ฒ ์ง๋๊ฐ๋ฉด ๋์ค์ ์ค๋ ๊ทธ๋ฐ๊ฒ! ์๊ฒ ํฌ์ธํธ๋ค.
๋ํ ํด๋น ์ธ์ดํด์ด ์์ด๋ ๊ทธ view์ layout์ด ๋ฌดํจํ ๋์์ด์ผ ์๋ก ์ง๋๊ฒ ๊ฐ๋ค
๊ทธ๋์, Constraint๋ฅผ ์์ ํด๋ ๋ฐ๋ก ์ ์ฉ์ด ์๋๊ณ ,
SetNeedsLayout() ๋๋ LayoutIfNeeded() ๋ฅผ ํด์ ์ ์ฉ์ ํด์ค์ผ ํ๋๋ณด๋ค.
setNeedsLayout()
Point
- Async
- ๋๊ธฐ
์์์ ๋ฌดํจํ๊ฐ ๋ผ์์ด์ผ ํ๋ค๊ณ ์ ์๋๋ฐ, ๋ฌดํจํ ํ๋ ๋ฐฉ๋ฒ์ setNeedsLayout()
์ ์จ์ฃผ๋ ๊ฒ์ด๋ค.
โํด๋น view ๋ค์ ์ฌ์ดํด๋ ์
๋ฐ์ดํธ ํด์คโ ๋ผ๋ ์๋ฏธ๋ฉฐ, ์ฐธ๊ณ 2๋ฒ ์ฌ์ดํธ์ ์ํ๋ฉด, ๊ทธ subviews
๋ ์
๋ฐ์ดํธ๊ฐ ๋๋ค.
๋ฐ๋ก ๋ฐ๋์ง ์์ผ๋ฉฐ ๋๊ธฐ ์ํ์ด๊ณ , ๋น๋๊ธฐ๋ก ์งํ๋๋ค, ๊ทธ๋ฆฌ๊ณ ์ด cycle์ ์ธ์ ์ค๋์ง ์๊ธฐ ํ๋ค๋ค๊ณ ํ๋ค.
โ2๋ฒ ์ฌ์ดํธ ํํโ
โplease update but you can wait until the next update cycleโ
์ ๋ฐ์ดํธ ํด์ค, ๊ทผ๋ฐ ๋ค์ ์ ๋ฐ์ดํธ๊น์ง ๊ธฐ๋ค๋ฆด๊ฒ
layoutIfNeeded()
point
- Sync
- ์ฆ์
์ฐจ์ด์ ์ด๋ผ๋ฉด ๋๊ธฐ๋ก ์งํ๋๊ณ , ๋ค์ cycle์ด ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฐ๋ก ์ ๋ฐ์ดํธ ์ํฌ๋ ์ธ ์ ์๋ค
โ2๋ฒ ์ฌ์ดํธ ํํโ
โupdate immediately pleaseโ
์ ๋ฐ์ดํธ ํด์ค, ๋น์ฅ!
์์๋ฅผ ํตํ ์ดํด
Zedd
๋๊ป์ ์ด ๋งํฌ๋ฅผ ์ถ์ฒํด์ฃผ์
จ๋ค.
setNeedsLayout()
์ ๋ค์ ์ ๋ฐ์ดํธ๋ ๊ธฐ๋ค๋ฆด๊ฒ!layoutIfNeeded()
์ ์ง๊ธ ๋น์ฅ ์ ๋ฐ์ดํธ ํด์ค!
๊ฒฐ๋ก ์ โ๋๋ค ์ ๊ฐ์ผ๋ก ์ ๋ฐ์ดํธ ํด์ค!โ ๋ก ์ดํด๋ฅผ ํ๋ค. ๊ทผ๋ฐ ์ด๋ ๊ฒ ์๊ฐํ๋ ์ ์ดํด๊ฐ ์๋๋ค,
self.blueHeight.constant = 100
UIView.animate(withDuration: 2.0, animations: {
self.view.setNeedsLayout()
// ๋๋
self.view.layoutIfNeeded()
})
์์ ์์ ์ด๊ฒ ์ดํด๊ฐ ์๋๋ค. layoutIfNeeded()
๋ ๋์ด๊ฐ constant
๊ฐ ๋ณ๊ฒฝ ๋์์๋, ์ ๋๋ฉ์ด์
ํจ๊ณผ๊ฐ ๋ณด์ด๋ฉด์ height
๊ฐ์ด ๋ฐ๋๋ค.
๋ฐ๋ฉด, setNeedsLayout()
์ ์ ๋๋ฉ์ด์
ํจ๊ณผ์์ด ๋ฐ๋ก ์๋ก์ด height
๊ฐ์ด ์ ์ฉ๋๋ค.
๊ธฐ์กด๊ฐ์ 0
, ์๊ฐ์ 100
์ด๋ผ ํด๋ณด์, ๋๋ค constant
๊ฐ 100์ผ๋ก ๋๋ค๋ ์๋ฏธ๋ค.
๊ทธ๋ผ ์์ ์์ ํ ๋ด์ฉ๋ค์ ๋ถ์ฌ๋ณด์
setNeedsLayout()
: 100์ผ๋ก ๋ฐ๊ฟจ์ด, ๋ค์ ์ ๋ฐ์ดํธ๋ ์ ์ฉํด์คlayoutIfNeeded()
: 100์ผ๋ก ๋ฐ๊ฟจ์ด, ๋น์ฅ ๋ฐ๊ฟ์ค
์ด๋ ๊ฒ ์๊ฐ์ ํด์ ์ดํด๊ฐ ์๋๋ค.
์ ์ดํด๊ฐ ์๋๋์ง ์ ์ด๋ณด๋ฉด,
- ๊ฒฐ๊ตญ์ ์ด๋ฏธ ์ ๋๋ฉ์ด์
ํธ์ถ์
100
์ผ๋ก ์ ์ธํด์คฌ์ผ๋ ์ ๋๋ฉ์ด์ ์์ํ ๋๋ฉด, ์ด๋ฏธ 100์๋๊ฐ?? ๊ทธ๋ผ cycle๋๋ค๊ฐ ์ ๋ฐ์ดํธํ ๋ ์ด๋ฏธ 100์ธ๊ฑฐ ๊ฐ์! ๊ทผ๋ฐ ์ ๋๋ฉ์ด์ ์ฃผ๋ฉดlayoutIfNeeded()
๋ ํจ๊ณผ๊ฐ ์๋ค? ๊ทธ๋ผ ์ ๋๋ฉ์ด์ ๋์ cycle์ด ์ ์ฉ ์๋๊ฑด๊ฐ? ๊ทธ๋ผsetNeedsLayout()
์ 2์ด ๋ค์ ๊ฐ์ด ๋ฐ๋์ด์ผํ๋๊ฒ ์๋๊ฐ?!
์ด์ํ์ : setNeedsLayout()
์ด 2์ด๋ค๊ฐ ์๋ ์์ํ์๋ง์ ๊ฐ์ด ๋ฐ๋??? ์ ์์ ํ๋ ค๋ฒ๋ฆผ
- 1๋ฒ์ด ์ด์ํ๋ค, ์์๊ณผ ๋์์ cycle์ด ๋๊ฑฐ๋ผ๋ฉด height๋
100
์ผ๋ก ์ด๋ฏธ ๋ฐํ์๋๊ฑฐ๊ณ ์ ์ฉ์ด ๋๊ฑฐ๋ค? ๊ทผ๋ฐ! ์ด๋ฏธ 100์ด๋ฉดlayoutIfNeeded()
๋ cycle ์์์ ์ด๋ฏธ 100์ด๋๊น, ์ ์ 100์ด ๋๋๊ฒ ์๋๋ผ, ์ด๋ฏธ 100์ด๊ฒ ๋ค?
์ด์ํ์ : ์ ์ ๋๋ฉ์ด์ ํจ๊ณผ๊ฐ ์ ์ฉ๋๊ฑฐ์ง? ๋ฐ๋ก 100์ผ๋ก ๋์ผํ๋๊ฑฐ ์๋๊ฐ?!
๋ฐ๋ณด์๋ค. ๊ธ์ธ๋๊น์ง๋ ์ ๋ชป ์ดํดํ๊ณ ์์๋คโฆ
์์ธ ํ์
Point_A
update cycle
์ ๋๊ณ ๋๋ค, ์ ์ ๋ ์ ์ ์๋ค
๊ทธ๋ ๋ค, ๋๋ ์ ์ ์์๋คโฆ
์ด๊ฑธ ๋นผ๋จน๊ณ ์๊ฐํ๋ ์ด์ํ ์ถ๋ก ๋ง ํ๋ค.
์ค์ ์ ์ด๊ฑฐ๋ค.
Point_B
- animations ๋ธ๋ก ์์ ๋ด์ฉ์ด animation ํจ๊ณผ๊ฐ ์ ์ฉ๋๋ค,
Point_C
setNeedsLayout()
๋ ๋ค์ update cycle๋.layoutIfNeeded()
๋ ์ฆ์.
ํฌ์ธํธ B์ C๋ฅผ ์์ด์ ๋ณด์
- animation ๋ธ๋ญ ๋ด์์
setNeedsLayout
์ ๋ค์๋ฒ์ update cycle ๋ ํด๋ฌ๋ผ๊ณ ์์ฒญํ๋ค. ์ฆ, ์ง๊ธ ํ๊ฒ์ ์์ฒญ๋งํจ. - animation ๋ธ๋ญ ๋ด์์
layoutIfNeeded()
๋ ์ฆ์ update๋ฅผ ์์ฒญํ๋ค, ๋ธ๋ญ ๋ด์์! ์ฆ, ์ง๊ธ ์์ฒญ๊ณผ ๋์์ ๋ณํ๊ฐ ์์๋๋ค.
ํฌ์ธํธ๋ ๋ธ๋ญ๋ด์์ ์์ฒญ๋ง ํ๋๋, ์์ฒญ + ์ ์ฉ์ด ๋์๋๋ ์๋ค.
ํ์ฌ height = 0
์ด์๊ณ ์ ๊ท๊ฐ height = 100
์ ์์ฒญ ์ฌํญ์ด์๋ค. layoutIfNeeded()
๋ ๊ทธ ๊ฐ์ด animation๋ ์ ์ฉํ๊ธฐ์ 0~100
์ด ๋๋ ๊ณผ์ ์ด animation์ผ๋ก ๋ณด์๋ค.
๊ทธ๋ฐ๋ฐ, setNeedsLayout()
์ ๊ฒฝ์ฐ animations ๋ธ๋ญ์์ ์์ฒญ๋ง ํ๊ธฐ์ ๋ณ๋ค๋ฅธ UI์ ์ผ๋ก ๋ณ๊ฒฝ ์์๊ฐ ์์๋ค.
๊ทธ๋ ๋ค๋ฉด, ํ๋ฒ์ ๋ฐ๋๊ฑด ์ด๋ป๊ฒ ์๊ฐํ ๊น? Point_A๊ฐ ํด๋ต์ด๋ค.
Animations ๋ธ๋ญ
์ด ์ง๋ํ cycle์ด ๋๋ค๊ฐ update cycle์ด ๋๊ฒ์ด๋ผ ๋ณธ๋ค.
๊ทธ๋ ๊ธฐ์ ํด๋น์ฌ์ดํด์ setNeedsLayout()
์ด ์์ฒญํ height = 100
์ ์ ์ฉํ๊ฒ์ด๋ฉฐ,
์ด๋ ์ ๋๋ฉ์ด์ ๊ณผ ๊ด๋ จ์ด ์๊ธฐ์ ํ๋ฒ์ ์ ์ฉ๋๊ฒ์ด๋ค.
์ฌ๋ ๋์ด ์ฐฉ๊ฐํ ๋๋์ด๋๊น? ์๊ฐ์ ์ผ๋ก height = 100
์ด ์ ์ฉ๋๊ณ ์ ๋๋ฉ์ด์
์ด ์์๋๊ฒ ๊ฐ์ง๋ง
animations ๋ธ๋ญ
์์update
์์ฒญ- ์ดํ
update cycle
์ ์ฉ &animation
์งํ์คโฆ animation
์งํ์ค โฆ ๋
์ด๋ ๊ฒ ๋๋๊ฒ ๋ง๋ค๊ณ ๋ณธ๋ค.
cycle์ ๋ด๊ฐ ์ปจํธ๋กคํ์ง ์์์ ์๊ฐ์ ๋ชปํ๋ค. ์์ ๋ฐ๋ณด์๋คโฆ.