iOS | ๐Ÿ‡ฐ๐Ÿ‡ท drawRect ์™€ setNeedsDisplay

์ด ๋‘ ๊ฐ€์ง€๋Š” ์–ด๋Š ํƒ€์ด๋ฐ์— ์‹คํ–‰๋˜๋Š”์ง€๊ฐ€ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

func draw(_ rect: CGRect)

๐Ÿ”— ๊ณต์‹๋ฌธ์„œ

์–ด๋Š ๋•Œ ๋ถˆ๋ ค์ง€๋Š” ๋ฉ”์†Œ๋“œ์ธ๊ฐ€

๋ทฐ๋Š” func draw(_ rect: CGRect)๋กœ ๊ทธ๋ ค์ง‘๋‹ˆ๋‹ค. ๋ทฐ๊ฐ€ ์ฒ˜์Œ ์ƒ์„ฑ๋  ๋•Œ์—๋Š” func draw(_ rect: CGRect)๋กœ ๋ทฐ๊ฐ€ ๊ทธ๋ ค์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก์ƒ์†๋ฐ›์€ custom class์—์„œ ์‚ฌ์šฉ๋  ๋•Œ์—๋Š” super๋ฅผ ๋Š˜ ๋ถˆ๋Ÿฌ์•ผํ•˜๋‚˜?

UIView์˜ func draw(_ rect: CGRect)๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์•„๋ฌด ์ฒ˜๋ฆฌ๋„ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, UIView๋ฅผ ์ƒ์†๋ฐ›์€ custom view์˜ ๊ฒฝ์šฐ์—๋Š” super.rect(rect) ๋ฅผ ๋ถ€๋ฅด์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ UILabel, UITextView ๋“ฑ UIView๋ฅผ ์ƒ์†๋ฐ›์€ view๋ฅผ ์ƒ์†๋ฐ›์€ custom view์˜ func draw(_ rect: CGRect)์—์„œ๋Š” super๋ฅผ ๋ถˆ๋Ÿฌ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

func setNeedsDisplay()

๐Ÿ”— ๊ณต์‹๋ฌธ์„œ

์–ด๋Š ๋•Œ ๋ถˆ๋ ค์ง€๋Š” ๋ฉ”์†Œ๋“œ์ธ๊ฐ€

๋ทฐ๊ฐ€ ์ƒˆ๋กœ ๊ทธ๋ ค์ ธ์•ผํ•  ๋•Œ, reload๊ฐ€ ํ•„์š”ํ•  ๋•Œ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์‹คํ–‰์‹œํ‚ค๋Š” ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค.

ํ˜ผ๋™ํ•ด์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์†Œ๋“œ๋“ค๊ณผ๋Š” ๋ฌด์—‡์ด ๋‹ค๋ฅธ๊ฐ€

  1. setNeedsDisplay
  • ๋ทฐ๊ฐ€ ์ฒ˜์Œ ์ƒ์„ฑ๋  ๋•Œ ๋ ˆ์ด์•„์›ƒ์ด ๊ตฌ์„ฑ๋˜๋Š” ์‚ฌ์ดํด์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹คํ–‰์‹œํ‚ค๋Š” ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค.
  • ๋ทฐ์— ์ถ”๊ฐ€๋œ ๋ชจ๋“  subView๋ฅผ ์ „๋ถ€ ์ƒˆ๋กœ ๊ทธ๋ฆด ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค.
  1. layoutIfNeeded
  • ํ™”๋ฉด ์žฌ๊ตฌ์„ฑ์ด ํ•„์š”ํ•ด์ง€๋ฉด view์™€ ๊ทธ ๋ทฐ์˜ subView๊ฐ€ ์ „๋ถ€ ์žฌ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ๋“ค์–ด hogeView.layoutIfNeeded()๋ฅผ ์‹คํ–‰ํ•œ ๊ฒฝ์šฐ
  • hogeView์™€ hogeView์— ์ถ”๊ฐ€๋œ subView๋“ค์ด super view์˜ ๋ ˆ์ด์•„์›ƒ์ด ์žฌ์„ค์ •๋˜๋ฉด ๋ฐ”๋กœ ์ƒˆ๋กœ ์žฌ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค.
  • trigger๋ฅผ ์„ค์ •ํ•˜๋Š” ๋Š๋‚Œ์˜ ๋ฉ”์†Œ๋“œ์ด๊ธฐ์— setNeedsDisplay, setNeedsLayout ๋ณด๋‹ค ๋ฌด๊ฒ์Šต๋‹ˆ๋‹ค.
  • ์ด ๋ฉ”์†Œ๋“œ๋Š” Main thread์—์„œ ๋ณผ๋ ค์ ธ์•ผํ•ฉ๋‹ˆ๋‹ค !!!! (๋‹น์—ฐํ•œ ์–˜๊ธฐ)
  1. layoutSubviews
  • iOS๊ฐ€ ํ™”๋ฉด์„ ์ƒˆ๋กœ ๊ทธ๋ฆด ๋•Œ ๋ถ€๋ฅด๋Š” ๋ฉ”์†Œ๋“œ๋กœ ์ง์ ‘ ๋ถ€๋ฅด๋Š”๊ฑด ์•ˆ๋ฉ๋‹ˆ๋‹ค !!!!!!!! โš ๏ธ

์ •๋ฆฌ

  • view๊ฐ€ ์ฒ˜์Œ ์ƒ์„ฑ๋  ๋•Œ ๋ ˆ์ด์•„์›ƒ ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค ๐Ÿ‘‰ func draw(_ rect: CGRect)
  • ๋ชจ๋“  superView์˜ ๋ชจ๋“  subView๋ฅผ ๋ฐ”๋กœ ์ƒˆ๋กœ ๊ทธ๋ฆฌ๊ณ  ์‹ถ๋‹ค ๐Ÿ‘‰ func setNeedsDisplay()
  • ํŠน์ • view์™€ ๊ทธ view์— ์ถ”๊ฐ€๋œ subView๋ฅผ ์ƒˆ๋กœ ๊ทธ๋ฆฌ๊ณ ์‹ถ๋‹ค ๐Ÿ‘‰ layoutSubviews

์ฐธ๊ณ 

๋‹ต๊ธ€ ๋‚จ๊ธฐ๊ธฐ

์•„๋ž˜ ํ•ญ๋ชฉ์„ ์ฑ„์šฐ๊ฑฐ๋‚˜ ์˜ค๋ฅธ์ชฝ ์•„์ด์ฝ˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋กœ๊ทธ ์ธ ํ•˜์„ธ์š”:

WordPress.com ๋กœ๊ณ 

WordPress.com์˜ ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ“๊ธ€์„ ๋‚จ๊น๋‹ˆ๋‹ค. ๋กœ๊ทธ์•„์›ƒ /  ๋ณ€๊ฒฝ )

Google photo

Google์˜ ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ“๊ธ€์„ ๋‚จ๊น๋‹ˆ๋‹ค. ๋กœ๊ทธ์•„์›ƒ /  ๋ณ€๊ฒฝ )

Twitter ์‚ฌ์ง„

Twitter์˜ ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ“๊ธ€์„ ๋‚จ๊น๋‹ˆ๋‹ค. ๋กœ๊ทธ์•„์›ƒ /  ๋ณ€๊ฒฝ )

Facebook ์‚ฌ์ง„

Facebook์˜ ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ“๊ธ€์„ ๋‚จ๊น๋‹ˆ๋‹ค. ๋กœ๊ทธ์•„์›ƒ /  ๋ณ€๊ฒฝ )

%s์— ์—ฐ๊ฒฐํ•˜๋Š” ์ค‘