Skip to content

Latest commit

ย 

History

History
65 lines (43 loc) ยท 6.66 KB

setNeedsLayout,setNeedsDisplay.md

File metadata and controls

65 lines (43 loc) ยท 6.66 KB

setNeedsLayout์™€ setNeedsDisplay์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.

์ฐธ๊ณ ํ•œ ๊ธ€

Answer

setNeedsLayout์™€ setNeedsDisplay์˜ ์—ญํ• 

UIView์˜ ๊ณต์‹๋ฌธ์„œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์ด ๋‚˜์˜จ๋‹ค.

View์˜ ์‹ค์ œ ์ปจํ…์ธ ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ, view๊ฐ€ ๋‹ค์‹œ ๊ทธ๋ ค์งˆ ํ•„์š”๊ฐ€ ์žˆ์Œ์„ ์‹œ์Šคํ…œ์— ์•Œ๋ฆฌ๋Š” ๊ฒƒ์€ ๊ฐœ๋ฐœ์ž์˜ ์ฑ…์ž„์ž…๋‹ˆ๋‹ค.
๊ฐœ๋ฐœ์ž๋Š” view์˜ setNeedsLayout๋‚˜ setNeedsDisplay๋ฅผ ํ˜ธ์ถœํ•จ์œผ๋กœ์จ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋“ค์€ ์‹œ์Šคํ…œ์ด ๋‹ค์Œ drawing cycle ๋™์•ˆ view๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์•ผํ•จ์„ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. view๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ drawing cycle๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์—, ์—ฌ๋Ÿฌ view์—์„œ ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋™์‹œ์— ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด์šฉ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด setNeedsLayout, setNeedsDisplay ๋‘ ๋ฉ”์„œ๋“œ ๋ชจ๋‘ UIView์˜ ํ•˜์œ„ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋ฉ”์„œ๋“œ๋“ค์€ view์˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ผ์–ด๋‚˜๊ณ  ์ด๋ฅผ ์‹œ์Šคํ…œ์— ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ํ˜ธ์ถœ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์‹œ์Šคํ…œ์€ drawing cycle์ด ๋Œ์•„์™”์„ ๋•Œ ์ด๋ฅผ ์ธ์ง€ํ•˜๊ณ  view๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์ฃผ๊ฒŒ๋œ๋‹ค.

  • View์˜ ๋‚ด์šฉ์„ ๋‹ค์‹œ ๊ทธ๋ ค์•ผ ํ•จ์„ ์‹œ์Šคํ…œ์— ์•Œ๋ฆฐ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฆ‰์‹œ ๋ฆฌํ„ด๋œ๋‹ค. ์š”์ฒญ์€ ๋‹ค์Œ drawing cycle์— ๋ฐ˜์˜๋œ๋‹ค.

๋‹ค์Œ drawing cycle์— ๋ฐ›์€ ์š”์ฒญ๋“ค์ด ํ•œ๋ฒˆ์— ๋ฐ˜์˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญ๋งŒ ํ•˜๊ณ  ์ฆ‰์‹œ ๋ฆฌํ„ด๋˜๋Š” ๊ฒƒ

  • ์ด ๋ฉ”์„œ๋“œ๋Š” UIKit, Core Graphics๋ฅผ ์‚ฌ์šฉํ•˜๋Š” View์—์„œ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค.
  • ์ด ๋ฉ”์„œ๋“œ๋Š” View์˜ ๋‚ด์šฉ์ด๋‚˜ ๋ชจ์–‘์ด ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ์—๋งŒ View๋ฅผ ๋‹ค์‹œ ๊ทธ๋ฆฐ๋‹ค ์œ„์น˜์˜ ๋ณ€ํ™”๋Š” ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, draw(_ rect:) ๋ฉ”์„œ๋“œ๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ํ˜ธ์ถœ๋œ๋‹ค.
  • ๋ฉ”์„œ๋“œ๊ฐ€ ์š”์ฒญํ•œ ์ž‘์—…(View์˜ ๋‚ด์šฉ์„ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š”)์€ ์š”์ฒญ ์‹œ์ ๋ณด๋‹ค ๋‚˜์ค‘์— ์ผ์–ด๋‚˜๊ฒŒ ๋จ์œผ๋กœ ์ด ๋ฉ”์„œ๋“œ๋Š” ๋น„๋™๊ธฐ ์•กํ‹ฐ๋น„ํ‹ฐ์ด๋‹ค.
  • receiver(์ˆ˜์‹ ์ž)์˜ ํ˜„์žฌ ๋ ˆ์ด์•„์›ƒ์„ ๋ฌดํšจํ™”ํ•˜๊ณ , ๋‹ค์Œ ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ ๋™์•ˆ ๋ ˆ์ด์•„์›ƒ ์—…๋ฐ์ดํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•œ๋‹ค.
  • View์˜ ํ•˜์œ„ View์— ๋Œ€ํ•œ ๋ ˆ์ด์•„์›ƒ์„ ์กฐ์ •ํ•˜๋ ค๋ฉด, App์˜ main ์“ฐ๋ ˆ๋“œ์—์„œ ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  • ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, [layoutSubViews()](https://developer.apple.com/documentation/realitykit/arview/layoutsubviews()/)๋ฉ”์„œ๋“œ๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ํ˜ธ์ถœ๋œ๋‹ค.
  • ๋ฉ”์„œ๋“œ๊ฐ€ ์š”์ฒญํ•œ ์ž‘์—…(View์˜ ๋ ˆ์ด์•„์›ƒ์„ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š”)์€ ์š”์ฒญ ์‹œ์ ๋ณด๋‹ค ๋‚˜์ค‘์— ์ผ์–ด๋‚˜๊ฒŒ ๋จ์œผ๋กœ ์ด ๋ฉ”์„œ๋“œ๋Š” ๋น„๋™๊ธฐ ์•กํ‹ฐ๋น„ํ‹ฐ์ด๋‹ค.

๋ฒˆ์™ธ - layoutIfNeeded()

  • ๋Œ€๋ถ€๋ถ„์˜ ๋‚ด์šฉ์€ setNeedsLayout()๊ณผ ๊ฐ™๊ณ  ์•„๋ž˜ ๋‘๊ฐ€์ง€์— ํ•ต์‹ฌ์ ์œผ๋กœ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
  • receiver(์ˆ˜์‹ ์ž)์˜ ํ˜„์žฌ ๋ ˆ์ด์•„์›ƒ์„ ๋ฌดํšจํ™”ํ•˜๊ณ , ํ˜ธ์ถœ ์ฆ‰์‹œ ๋ ˆ์ด์•„์›ƒ ์—…๋ฐ์ดํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•œ๋‹ค.
  • ๋ฉ”์„œ๋“œ๊ฐ€ ์š”์ฒญํ•œ ์ž‘์—…(View์˜ ๋ ˆ์ด์•„์›ƒ์„ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š”)์ด ๋ฐ”๋กœ ์‹œํ–‰๋จ์œผ๋กœ ๋™๊ธฐ์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.

๋ฒˆ์™ธ - setNeedsLayout()์™€ย layoutIfNeeded()์˜ ์ฐจ์ด์  ์ถœ์ฒ˜

drawing cycle

UIView ํด๋ž˜์Šค๋Š” ์ปจํ…์ธ ๋ฅผ ํ‘œ์‹œํ•  ๋•Œ, on-demand drawing model(์ฃผ๋ฌธํ˜• ๋“œ๋กœ์ž‰ ๋ชจ๋ธ)์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ ์ฃผ๋ฌธ์— ์˜ํ•ด ๋™์ž‘ํ•˜๋Š” ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.
view๊ฐ€ ์ฒ˜์Œ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๋ฉด, ์‹œ์Šคํ…œ์€ ์ปจํ…์ธ ๋ฅผ ๊ทธ๋ ค๋‹ฌ๋ผ๊ณ  ์ฃผ๋ฌธ์„ ๋„ฃ๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์‹œ์Šคํ…œ์€ ์ปจํ…์ธ ์˜ ์Šค๋ƒ…์ƒท์„ ์บก์ณํ•˜๊ณ , ํ•ด๋‹น ์Šค๋ƒ…์ƒท์„ view์˜ ์‹œ๊ฐ์ ์ธ ํ‘œํ˜„์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
view์˜ ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฉด view์˜ ๋“œ๋กœ์ž‰ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์—†๋‹ค. ๋ฐ˜๋Œ€๋กœ ์ปจํ…์ธ ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๋ฉด view๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์‹œ์Šคํ…œ์— ์•Œ๋ฆฌ๊ณ , view๊ฐ€ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์— ๋”ฐ๋ผ drawing์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๊ทธ ๊ฒฐ๊ณผ์˜ ์Šค๋ƒ…์ƒท์„ ์บก์ณํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋œ๋‹ค.

view๊ฐ€ ์ฒ˜์Œ ๋‚˜ํƒ€๋‚˜๊ฑฐ๋‚˜ ์ผ๋ถ€๋ฅผ ๋‹ค์‹œ ๊ทธ๋ ค์•ผํ•˜๋Š” ๊ฒฝ์šฐ, iOS๋Š” view์˜ draw(_ rect:) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ view์—๊ฒŒ ์ปจํ…์ธ ๋ฅผ ๊ทธ๋ ค๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•œ๋‹ค.
draw(_ rect:) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํŠธ๋ฆฌ๊ฑฐ ์ด๋ฒคํŠธ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • View๋ฅผ ๋ถ€๋ถ„์ ์œผ๋กœ ๊ฐ€๋ฆฌ๊ณ  ์žˆ๋˜ ๋‹ค๋ฅธ view์˜ ์ด๋™ ๋˜๋Š” ์ œ๊ฑฐ
  • hidden ํ”„๋กœํผํ‹ฐ๋ฅผ false๋กœ ์„ค์ •ํ•˜์—ฌ, ์ด์ „์— ์ˆจ๊ฒจ์ง„ view๋ฅผ ๋‹ค์‹œ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค๊ธฐ
  • view๋ฅผ ํ™”๋ฉด ๋ฐ–์œผ๋กœ ์Šคํฌ๋กค ํ•œ ๋‹ค์Œ, ํ™”๋ฉด์œผ๋กœ ๋‹ค์‹œ ์ด๋™ํ•˜๊ธฐ
  • view์˜ setNeedsDisplay ๋˜๋Š” setNeedsDisplayInRect(_:) ๋ฉ”์„œ๋“œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๊ธฐ

์ง€๊ธˆ๊นŒ์ง€ setNeedsDisplay๋‚˜ setNeedsDisplayInRect(_:)๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ ๋ทฐ๊ฐ€ ์ œ๋Œ€๋กœ ์—…๋ฐ์ดํŠธ ๋˜์—ˆ๋‹ค๋ฉด ๊ทธ ์™ธ 3๊ฐ€์ง€ ์ผ€์ด์Šค์— ํ•ด๋‹น๋˜์–ด ๋‚ด๋ถ€์ ์œผ๋กœ ํ˜ธ์ถœ์ด ๋˜์—ˆ์„ ๊ฒƒ์ด๋‹ค.

view์˜ ์—…๋ฐ์ดํŠธ๋Š” ๋ฐ”๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ drawing cycle์ด ๋Œ์•„์™”์„ ๋•Œ ํ•œ๊บผ๋ฒˆ์— ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„ ์„ค๋ช…์ฒ˜๋Ÿผ, ํ˜„์žฌ view์˜ ์Šค๋ƒ…์ƒท์„ ์บก์ณํ•ด๋†“์•˜๋‹ค๊ฐ€ ์ปจํ…์ธ ์˜ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜์„œ ์‹œ์Šคํ…œ์—๊ฒŒ ์—…๋ฐ์ดํŠธ ์š”์ฒญ์„ ํ•œ๋‹ค๋ฉด ๋“ค์–ด์˜จ ์š”์ฒญ๋“ค์€ ์ฆ‰๊ฐ ๋ฐ˜์˜์ด ๋˜๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ๋‹ค์Œ drawing cycle์ด ๋Œ์•„์™”์„ ๋•Œ ์ผ๊ด„ ์ฒ˜๋ฆฌ๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋•Œ, view์˜ ์—…๋ฐ์ดํŠธ๋ฅผ draw(_ rect:) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ•œ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํŠธ๋ฆฌ๊ฑฐ ์ด๋ฒคํŠธ๋Š” ์œ„ 4๊ฐ€์ง€ ๊ฒฝ์šฐ์ด๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ, draw(_ rect:) ๋ฉ”์„œ๋“œ๋Š” ์ง์ ‘ ํ˜ธ์ถœํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” view ๊ฐ์ฒด๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ„ ๋’ค(viewDidLoad ์ดํ›„) ์ตœ์ดˆ๋กœ ํ˜ธ์ถœ๋˜๋Š”๋ฐ, ๋งŒ์•ฝ ๊ทธ ์ดํ›„์— ํ•„์š”์— ์˜ํ•ด ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” setNeedsDisplay(), setNeedsDisplayInRect(_:) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•œ๋‹ค.