Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

potato's iOS Story/๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๋งŒ๋‚œ ์นœ๊ตฌ๋“ค

[UIKit] ์ฝ”๋“œ๋ฆฌ๋ทฐ์˜ ํ•˜๋ฃจ,, (lineBreakStrategy, lineBreakMode, isUserInteractionEnabled(), isOpaque(), scrollToRow(), needsDisplayOnBoundsChange)

๊ฐ์ž ๐Ÿฅ” 2022. 11. 2. 15:17
๋ฐ˜์‘ํ˜•

 

์˜ค๋Š˜์€ ์ง‘์ค‘์ด ์ž˜ ์•ˆ๋˜๋Š” ๋‚ ์ด์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ƒˆ๋กœ์šด ๋ทฐ๋ฅผ ์งœ๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ์˜ฌ๋ผ์™€ ์žˆ๋Š” PR์— ๋Œ€ํ•ด ์ฝ”๋“œ๋ฆฌ๋ทฐํ•˜๋Š๋ผ ๋ฐ”๋นด๋˜ ๋‚ ์ด๋‹ค.
์ฝ”๋“œ๋ฆฌ๋ทฐ๊ฐ€ ๋ฐ€๋ฆฌ๊ธฐ๋„ ํ–ˆ๊ณ ,,,, ์šฐ๋ฆฌํŒ€์›๋“ค์˜ ์ฝ”๋“œ๋Š” ์ฐธ ๋ฐฐ์šธ๊ฒŒ ๋งŽ๋‹ค!๐Ÿ‘

 

๋„๋Œ€์ฒด ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ์–ผ๋งˆ๋‚˜ํ•˜๊ธธ๋ž˜ ๋ช‡์‹œ๊ฐ„์ด ๊ฑธ๋ ค?

์ด๋งŒํผ...์˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ํ–ˆ๋‹ค๋ฉด ๋ฏฟ๊ฒ ๋Š”๊ฐ€  ์œผํ•˜ํ•˜ํ•˜ํ•ณ์•„ใ…กํ•˜ํ•˜ํ•ณํ•˜ใ…ใ…Žํ•˜ใ…ํ•˜ ์žฌ๋ฐŒ๋”ฐ!
๊ทธ๋ž˜๋„ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ๋Œ€์ถฉ ๊ฐ€์ ธ๊ฐˆ์ˆ˜๋Š” ์ ˆ๋Œ€ never naver ์•ˆ๋˜๋‹ˆ๊นŒ,,, ์ตœ๋Œ€ํ•œ ์ •์„ฑ๋“ค์—ฌ์„œ ํ–ˆ๋‹ค. ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ํ•˜๋ฉด ํ•  ์ˆ˜๋ก, ํŒ€์›๋“ค์˜ ์ปจ๋ฒค์…˜์ด ์ ์  ๋งž์•„๊ฐ€๊ณ , ํ•œ๋ช…์ด ์ง  ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค.

์ง€๊ธˆ ์‹œ์ž‘ํ•œ์ง€ ์ผ์ฃผ์ผ ๋๋Š”๋ฐ ๋ฒŒ์จ ์ด๋ ‡๊ฒŒ ๋งž์ถฐ์ง€๊ณ  ์žˆ์œผ๋‹ˆ! 
๊ฒฐ๊ตญ ์ž˜ํ•˜๋Š” ์‚ฌ๋žŒ ํ•œ ๋ช…์˜ ์ฝ”๋“œ๋ฅผ ์œ„์ฃผ๋กœ ๋”ฐ๋ฅด๊ฒŒ ๋˜๋Š” ๊ฑฐ ๊ฐ™๊ธดํ•˜๋‹ค. 
๋‚˜์ค‘์—” ๋‚ด๊ฐ€ ๋ฆฌ๋“œํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉด ์ข‹๊ฒ ๋”ฐ!

๋ถ€๊ฐ€์ ์ธ ์ด์•ผ๊ธฐ๋กœ,, ๋‚ด๊ฐ€ ์šฐ๋ฆฌํŒ€์› ๊ฐ“๋“€์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ๋‚จ๊ธด ์ฝ”๋ฉ˜ํŠธ,, 

์ œ๋ฐœ ์ด๋ฒˆ ํ”Œ์  ๋๋‚ ๋•Œ๋Š” ๋‘์„ ์ƒ๋‹˜ ์ฝ”๋“œ์—์„œ๋„ p1, p2 ํ• ๋งŒํผ ์ค‘์š”ํ•œ ๋ฆฌ๋ทฐ๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๊ธธ!

์ž ์ด์ œ ๊ทธ๋งŒ ๋– ๋“ค๊ณ  ๋ฐฐ์šด๊ฑฐ ์ฐจ๊ทผ์ฐจ๊ทผ ์ ์–ด๋ณด์ž.

 


 

๋‚ด๊ฐ€ ์˜ค๋Š˜ ์ฃผ๋กœ ๋ฆฌ๋ทฐํ•œ PR์€ ์‚ฌ๋žŒ ํ„ฐ์น˜ ์ด๋ฒคํŠธ์— ๋”ฐ๋ผ์„œ ๋ทฐ๊ฐ€ ์ด๋™ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋ผ๋˜์ง€, ์Šคํฌ๋กค์ด ์ž๋™์œผ๋กœ ์ปจํŠธ๋กค๋˜๋Š” ๊ธฐ๋Šฅ ๋“ฑ์— ๋Œ€ํ•ด์„œ ๋ฆฌ๋ทฐํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฝ”๋“œ๋ฅผ ์ฝ์œผ๋ฉด์„œ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ชฐ๋ž๋˜๊ฒƒ์„ ์ฐพ์•„๋ณด์•˜๊ณ , ๊ทธ์™€ ๊ด€๋ จ๋œ ์ฝ”๋“œ๋“ค์ด ์•„๋ž˜ ๋งŽ์„ ๊ฒƒ์ด๋‹ค! (์•„๋‹Œ ๊ฒƒ๋„ ์žˆ์Œ ~.~)

 

๐ŸŸฃ UILabel์—์„œ lineBreakStrategy์™€ lineBreakMode์˜ ์ฐจ์ด๊ฐ€ ์žˆ์„๊นŒ?

์˜ค๋Š˜ ํŒ€์›์˜ ์ฝ”๋“œ์—์„œ UILabel์— ๋Œ€ํ•œ ์†์„ฑ๊ฐ’์œผ๋กœ ๋‘ ๊ฐ€์ง€๋ฅผ ๋ดค๋‹ค. ๋‘๊ฐ€์ง€ ๋ชจ๋‘ ์ค„์ด ๋„˜์–ด๊ฐˆ ๋•Œ ์–ด๋–ป๊ฒŒ break ํ•˜๋ƒ์— ์ค‘์ ์„ ๋‘๋Š” ์ฝ”๋“œ์ธ๊ฒƒ ๊ฐ™์€๋ฐ, ๋‘๊ฐœ์˜ ๊ตฌ์ฒด์ ์ธ ์—ญํ• ๊ณผ ์ฐจ์ด์ ์ด ๊ถ๊ธˆํ•ด์กŒ๋‹ค.

(๊ทผ๋ฐ ๊ฒฐ๊ตญ ๊ณต์‹๋ฌธ์„œ์—๋„ ๋‚˜์™€์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—,, ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค,, ๊ทธ๋ƒฅ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค~~ ์ด๋ ‡๊ฒŒ๋งŒ ๋‚˜์™€์žˆ์–ด ์™„์ „ ๋ถˆ์นœ์ ˆํ•ด.... ๊ฒฝํ—˜๋งŒ์ด ์‚ด๊ธธ... ๊ฒฝํ—˜์„ ํ†ตํ•ด ๋ฐฐ์šฐ๊ฒŒ๋œ๋‹ค๋ฉด, ์ˆ˜์ •ํ•˜๋Ÿฌ ์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค ใ… ใ… )

lineBreakStrategy

๐ŸŽ ๋‹จ๋ฝ์„ ๋ฐฐ์น˜ํ•˜๋ฉด์„œ ์ค„์„ ๋Š๋Š” ์ „๋žต.
The strategy for breaking lines while laying out paragraphs.  (๊ณต์‹๋ฌธ์„œ)

line break mode ์™€ ๋‹ค๋ฅด๋‹ค๊ณ  ๋‚˜์™€์žˆ๋”ฐ. ..

'์ปจํ…Œ์ด๋„ˆ์™€ ๋งž์ง€ ์•Š๋Š” text์˜ ์ค„์— ๋Œ€ํ•ด์„œ ์กฐ์ ˆํ•˜๋Š” lineBreakMode'์™€๋Š” ๋‹ค๋ฅด๋‹ค 

์ด๊ฒŒ ๋ฌด์Šจ๋ง์ด์ง€ ;;

 

 

์–ด์จ‹๋“  ์ด ๋ฉ”์„œ๋“œ๋Š”, UILabel ๋‚ด๋ถ€์—์„œ ์ค„์ด ๋Š๊ธฐ๊ฒŒ ๋  ๋•Œ ์–ด๋–ป๊ฒŒ ๋Š๊ธฐ๊ฒŒ ํ•  ๊ฑด์ง€์— ๋Œ€ํ•œ ์ „๋žต์„ ์˜ต์…˜์œผ๋กœ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ํŠนํžˆ ํ•œ๊ธ€์€ "์ด๋ ‡" "๊ฒŒ" ๋Š๊ธฐ๊ฒŒ ๋˜๋ฉด ๋ฌธ์žฅ์ด ๋˜๊ฒŒ ์–ด์ƒ‰ํ•ด ์ง€๋Š”๋ฐ, ์ด๋–„ lineBreakStrategy์— ์žˆ๋Š” .hangulPriority๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ค„๋ฐ”๊ฟˆ์„ ์ด์˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜๊ธฐ ์ „
ํ•˜๊ณ ๋‚œ ํ›„

if #available(iOS 14.0, *) {
    paragraphStyle.lineBreakStrategy = .hangulWordPriority
}

์ด๋ ‡๊ฒŒ ํ•œ๊ธ€ ์ค„๋ฐ”๊ฟˆ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ท€์—ฌ์›Œ hangul,,,, 
๊ทผ๋ฐ ์ด ํ•œ๊ธ€ ์ค„๋ฐ”๊ฟˆ ๊ธฐ๋Šฅ์€ ios 14์ด์ƒ์—์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๊ธฐ๋•Œ๋ฌธ์— ์ €๋ ‡๊ฒŒ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผํ•œ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๋ฉด, ios 14 ์ด์ƒ์—์„œ๋Š” ๋”ฑํžˆ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ํ•œ๊ธ€๋„ ์ž˜ ๋ถ„๋ฆฌ๋˜์„œ ๋‚˜์˜จ๋‹ค๊ณ  ํ•œ๋‹ค. ์ƒํ™ฉ์— ๋งž๊ฒŒ, ์ ์šฉ์ด ์•ˆ๋ ๋•Œ ์‚ฌ์šฉํ•ด๋ณด์ž!!

 

lineBreakMode

๐ŸŽ ์ปจํ…Œ์ด๋„ˆ์— ๋งž์ง€ ์•Š๋Š” ๋‹จ๋ฝ์˜ ์ค„ ๋ฐ”๊ฟˆ ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค.
๐ŸŽ ๋ ˆ์ด๋ธ”์˜ ํ…์ŠคํŠธ๋ฅผ ์ค„ ๋ฐ”๊ฟˆํ•˜๊ณ  ์ž๋ฅด๋Š” ๊ธฐ์ˆ ์ด๋‹ค.
The mode for breaking lines in the paragraph that don’t fit within a container. (๊ณต์‹๋ฌธ์„œ)
The technique for wrapping and truncating the label’s text. (๋‘๋ฒˆ ์งธ ๊ณต์‹๋ฌธ์„œ, ์™œ ๋‘๊ฐœ์–‘?? )

๋ญ์•ผ ๊ทธ๋ž˜์„œ lineBreakStrategy์™€ ๋ญ๊ฐ€๋‹ฌ๋ผ;; ํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์ด๊ฒƒ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‹ค๋ฅด๋‹ค๊ณ  ํผ์ง€๋ง‰ํ•˜๊ฒŒ ๋‚˜์™€์žˆ๋‹ค.

์™œ์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ๊ณต์‹๋ฌธ์„œ์— ๋‘ ๊ฐ€์ง€ ๋ฒ„์ ผ์˜ discussion ์ด ์žˆ๋‹ค. ;; 

https://developer.apple.com/documentation/uikit/nsparagraphstyle/1529937-linebreakmode

 

Apple Developer Documentation

 

developer.apple.com

https://developer.apple.com/documentation/uikit/uilabel/1620525-linebreakmode

 

Apple Developer Documentation

 

developer.apple.com

๋‘ ๊ฐœ๋‹ค "NSLineBreakMode" ํƒ€์ž…์ด๋‹ค. ๋™์ผํ•œ๊ฒƒ์ธ๋“ฏ? ๋‘๊ฐœ์˜ ํ•ด์„์„ ์กฐํ•ฉํ•ด์„œ lineBreakStrategy์™€ ๋ญ๊ฐ€๋‹ค๋ฅธ์ง€ ์‚ดํŽด๋ณด์ž.

  • ์ด ์†์„ฑ์€ ๋ง์ค„์ž„ํ‘œ (...) ๋กœ ๋ง์„ ์ค„์ด๊ฑฐ๋‚˜, text๋ฅผ ์ž˜๋ž์„๋•Œ์™€ ๊ฐ™์ด container์— ๋งž์ง€ ์•Š๋Š”, ๋ ˆ์ด์•„์›ƒ์ด ๋ฒ—์–ด๋‚˜๋Š” text๋“ค์— ๋Œ€ํ•ด์„œ ์ œ์–ดํ•˜๋Š” ํ”„๋กœํผํ‹ฐ๋‹ค.
  • ์ด๊ฒƒ์€ '์‹œ์Šคํ…œ์ด ๋‹จ๋ฝ ๋‚ด๋ถ€์—์„œ ์ค„๋ฐ”๊ฟˆ์„ ์ œ์–ดํ•˜๋Š” lineBreakStrategy'์™€๋Š” ๋‹ค๋ฅด๋‹ค.
  • ์Šคํƒ€์ผ์ด ์ง€์ •๋œ ํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์ƒˆ ๊ฐ’์„ ํ• ๋‹นํ•ด์ฃผ๋ฉด ์ „์ฒด ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด์„œ ์ค„๋ฐ”๊ฟˆ ๋ชจ๋“œ๊ฐ€ ์ ์šฉ๋œ๋‹ค. 

 

๊ทธ๋ž˜์„œ lineBreakStrategy์™€ lineBreakMode์˜ ์ฐจ์ด์ ์€?

์Œ ์‚ฌ์‹ค, ๋‘๊ฐœ์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด์„œ ์ž์„ธํ•˜๊ฒŒ ์•Œ์ง€ ๋ชปํ•˜๊ฒ ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ ๊ทธ ๋‚ด๋ถ€์— ์–ด๋–ค ์†์„ฑ์ด ์žˆ๋Š”์ง€์— ๋”ฐ๋ผ์„œ ํ•„์š”์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?

์šฐ์„  lineBreakStrategy์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์†์„ฑ์ด ์žˆ๋‹ค. hangulWordPriority๊ฐ€ ์‹ ์„ ํ–ˆ๊ณ , ํ•œ๊ตญ์ธ์ด ํƒ€๊ฒŸ์ธ ์•ฑ์„ ๋งŒ๋“ค๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ๊ฒƒ ๊ฐ™๋‹ค.

 

๋‹ค์Œ์€ lineBreakMode์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์†์„ฑ๋“ค์ด๋‹ค. 

 

๋ญ”๊ฐ€ ์ด๋ ‡๊ฒŒ ์†์„ฑ๋“ค์„ ๋น„๊ตํ•ด๋ณด๋‹ˆ๊นŒ, ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์“ฐ์ด๋Š”์ง€๋Š” ๋Œ€์ถฉ ์•Œ๊ฒ ๋‹ค. ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด๋ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฐจ์ด์ ๋„ ์กฐ๊ธˆ ๋ณด์ธ๋‹ค. lineBreakStrategy๋Š” ๋Œ€๋ถ€๋ถ„ '๋‹จ๋ฝ'์„ ๊ธฐ์ค€์œผ๋กœ ์ค„๋ฐ”๊ฟˆ ๊ธฐ์ค€, ๋‹จ์–ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ค„์„ ๋ฐ”๊พธ๋Š” ๊ธฐ์ค€์„ ์„ธ์šด๋‹ค. ๊ทผ๋ฐ lineBreakMode์˜ ์†์„ฑ๋“ค์„ ๋ณด๋ฉด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ‘œ์‹œ๋˜๊ณ  ์•ˆ๋˜๊ณ , ๋„˜์–ด๊ฐ€๊ณ  ์•ˆ๋„˜์–ด๊ฐ€๊ณ  ์ด๋Ÿฐ๊ฒƒ์— ๋Œ€ํ•œ ๊ธฐ์ค€์„ ์ •ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. 

 

์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ญ˜๊นŒ? ์ธํ„ฐ๋„ท์— ๋ญ˜ ์ณ์•ผํ•˜๋Š”์ง€ ๋ชฐ๊ฒŸ์ง€๋งŒ,, ์ผ๋‹จ ๋ฌธ๋งฅ์ƒ UILabel, ๊ทธ๋‹ˆ๊นŒ ๊ทธ ์†์„ฑ์„ ๋‹ด๊ณ ์žˆ๋Š” ๋ฌด์–ธ๊ฐ€(๋ทฐ)๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. 

 

๐ŸŸฃ scrollToRow() ๋ž€

์ธ๋ฑ์Šค ๊ฒฝ๋กœ๊ฐ€ ์‹๋ณ„ํ•˜๋Š” ํ–‰์ด ํŠน์ • ์œ„์น˜์— ์žˆ์„ ๋•Œ๊นŒ์ง€ tableView๋ฅผ ์Šคํฌ๋กค ํ•œ๋‹ค.

https://developer.apple.com/documentation/uikit/uitableview/1614997-scrolltorow

 

Apple Developer Documentation

 

developer.apple.com

 

๊ณต์‹๋ฌธ์„œ๋Š” ์™œ ๋ง์ด ์–ด๋ ค์šธ๊นŒ ;;; 
UITableView์˜ scrollToRow() ๋ฉ”์„œ๋“œ๋Š” 'ํŠน์ • ์…€๋กœ ์Šคํฌ๋กค ์‹œํ‚ค๊ธฐ'์œ„ํ•œ ๋ฉ”์„œ๋“œ์ด๋‹ค. ํŠน์ • ์ƒํ™ฉ์—์„œ ํŠน์ • ํ…Œ์ด๋ธ”๋ทฐ์˜ ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ฒŒํ•˜๋Š”๊ฒƒ!!

์›ํ•˜๋Š” ์œ„์น˜์˜ indexPath๋ฅผ ์ง€์ •ํ•ด์„œ  scrollToRow ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์„ธ ๊ฐ€์ง€๋กœ ๋ฐ›๋Š”๋‹ค. at์—๋‹ค๊ฐ€ indexPath๋ฅผ ์ž…๋ ฅํ•ด์„œ ํŠน์ • ์œ„์น˜๋ฅผ์ง€์ •ํ•ด์ฃผ๊ณ , at์€ ํŠน์ •์œ„์น˜์˜ ์–ด๋Š ํฌ์ง€์…˜์œผ๋กœ ๊ฐˆ์ง€ ์ ์–ด์ฃผ๋ฉด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  animated ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์Šคํฌ๋กค ์• ๋‹ˆ๋ฉ”์ด์…˜๋„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋”ฐ. animation : false ๋ผ๋ฉด, ์• ๋‹ˆ๋ฉ”์ด์…˜ ์—†์ด ํˆญ. ํ•˜๊ณ  ๊ทธ ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค. 

self.tableView.scrollToRow(at: endIndex, at: .bottom, animated: true)

 

์ฐธ๊ณ ์ž๋ฃŒ https://0urtrees.tistory.com/54

 

๐ŸŸฃ isUserInteractionEnabled() ๋ž€

์œ ์ €์˜ ์ด๋ฒคํŠธ๊ฐ€ event queue๋กœ๋ถ€ํ„ฐ ๋ฌด์‹œ๋˜๊ณ  ์‚ญ์ œ๋๋Š”์ง€๋ฅผ ํŒ๋‹จํ•˜๋Š” bool ๊ฐ’

https://developer.apple.com/documentation/uikit/uiview/1622577-isuserinteractionenabled

 

Apple Developer Documentation

 

developer.apple.com

 

์ฆ‰, UserInteractionEnabled == false๋ฅผ ํ•˜๋ฉด, view์— ๋Œ€ํ•œ touch, press, keyboard, focus event ๋“ฑ ๋ชจ๋“  ๊ฒƒ๋“ค์ด ์ด๋ฒคํŠธ ๋Œ€๊ธฐํ–‰๋ ฌ (queue)์—์„œ ์‚ญ์ œ๋˜๊ณ  ๋ฌด์‹œ๋œ๋‹ค. ๋ฐ˜๋Œ€๋กœ true ์ด๋ฉด, ๋ชจ๋“  ์ด๋ฒคํŠธ๋Š” ์ •์ƒ์ ์œผ๋กœ ๋ทฐ์— ์ „๋‹ฌ๋œ๋‹ค.  default๋Š” true์ด๊ธฐ ๋•Œ๋ฌธ์— false๋กœ ์„ค์ •ํ•ด์ฃผ์ง€ ์•Š๋Š” ์ด์ƒ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

ํ•˜์ง€๋งŒ ๋งค๋ฒˆ ํ•ญ์ƒ always always true ๊ฐ’์„ ๊ฐ–๋Š”๊ฑด ์•„๋‹ˆ๋‹ค.
animation์„ ์ ์šฉํ•˜๋Š” ๋™์•ˆ์—๋Š” ์ด ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์ด false / true ์ƒ๊ด€์—†์ด ๋ชจ๋“  ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ฐ€ disable๋œ๋‹ค๊ณ  ํ•œ๋‹ค. ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์ง„ํ–‰๋˜๊ณ  ์žˆ์„๋•Œ ์–ด๋– ํ•œ ํ„ฐ์น˜์ด๋ฒคํŠธ๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๊ณผ์ •์ด ์žˆ์—ˆ์„ ๊ฒƒ์ธ๋ฐ, ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ๊ฐ€ ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•œ๋‹ค. 

๋‚˜๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์ง„ํ–‰๋˜๊ณ  ์žˆ์„ ๋•Œ๋„ ์ด๋ฒคํŠธ๋ฅผ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด, ์• ๋‹ˆ๋ฉ”์ด์…˜ ์˜ต์…˜์œผ๋กœ allowUserInteraction์„ ์ฃผ๋ฉด ๋œ๋‹ค๊ณ  ํ•œ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ https://www.zehye.kr/ios/2021/08/12/iOS_isUserInteractionEnabled/

 

๐ŸŸฃ needsDisplayOnBoundsChange ๋ž€

bound ์‚ฌ๊ฐํ˜•์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋ ˆ์ด์–ด ์ปจํ…์ธ ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ• ์ง€ ๋‚˜ํƒ€๋‚ด๋Š” Boolean ๊ฐ’

https://developer.apple.com/documentation/quartzcore/calayer/1410923-needsdisplayonboundschange

 

Apple Developer Documentation

 

developer.apple.com

 

true๋กœ ์„ค์ •๋œ๋‹ค๋ฉด, ์†์„ฑ์ด ๋ณ€๊ฒฝํ•  ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์ค€๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ ์–ธ์ œ๋‚˜ false ์ด๋‹ค. ์šฐ๋ฆฌ ๋ทฐ์—์„œ๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ๋ธ”๋Ÿฌ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ์‚ฌ์šฉ๋๋‹ค. ์•„๋ฌด๋ž˜๋„ ๋ธ”๋Ÿฌ์ฒ˜๋ฆฌ,, ๋œ ๊ฒƒ์„ ํ™”๋ฉด์ด ๋ฐ”๋€Œ๋ฉด ์˜ฌ๋ ค์ฃผ๊ณ  ํ•˜๋Š”๊ณผ์ •์ด ํ•„์š”ํ•ด์„œ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€œ์—๋”ฐ๋ผ ์˜ฌ๋ ค์ฃผ์–ด์•ผํ•˜๋‹ˆ๊นŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์„๊นŒ? ,,, ์„ค๋ช…์ด ์ฐธ ๋ถ€์กฑํ•˜๋‹ค ์ธํ„ฐ๋„ท์—๋Š”!! !ใ… ใ…  ๋“€์„ ์ƒํ•œํ…Œ ๋ฌผ์–ด๋ด์•ผ์ง•

 

๐ŸŸฃ isOpaque() ๋ž€

ํŒ€์›์˜ ์ฝ”๋“œ์—์„œ ์•ฝ๊ฐ„ ํˆฌ๋ช… ์žฌ์งˆ์˜ ๋ธ”๋Ÿฌ์ฒ˜๋ฆฌ ํ™”๋ฉด์„ ๋งŒ๋“œ๋Š” task๊ฐ€ ์žˆ์—ˆ๋‹ค. ๊ทธ๋•Œ

self.isOpaque() = false
self.layer.isOpaque() = false

๊ฐ€ ๋“ฑ์žฅํ–ˆ๊ณ , ๋ญ”์ง€๊ฐ€ ๊ถ๊ธˆํ•ด์กŒ๋‹ค.

๐Ÿ‘‰ view๊ฐ€ ๋ถˆํˆฌ๋ช…ํ•œ์ง€, ํˆฌ๋ช…ํ•œ์ง€์— ๋Œ€ํ•ด์„œ ๊ฒฐ์ •ํ•˜๋Š” Bool ๊ฐ’์ด๋ผ๊ณ  ํ•œ๋‹ค.
A Boolean value that determines whether the view is opaque.

<๊ณต์‹๋ฌธ์„œ> https://developer.apple.com/documentation/uikit/uiview/1622622-isopaque

์œ„ ๋ง ๊ทธ๋Œ€๋กœ ํˆฌ๋ช…๋„๋ฅผ ์กฐ์ ˆํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ’์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

์ด ๊ฐ’์„ false๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด, ์™„์ „ํžˆ ํˆฌ๋ช…ํ•œ ๋ทฐ๊ฐ€ ๋œ๋‹ค. ๋ฐ˜๋Œ€๋กœ true๋กœ ์„ค์ •ํ•˜๋ฉด, drawing ์‹œ์Šคํ…œ์ด view๋ฅผ ์™„์ „ํžˆ ๋ถˆํˆฌ๋ช…ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋Ÿผ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ณต์‹๋ฌธ์„œ์— ๋‚˜์™€์žˆ๋Š”๋ฐ? ์™œ? ๊ทธ๋Ÿด๊นŒ?? ์™œ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋ ๊นŒ?

isOpaque() = false ์ผ ๋•Œ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒํ•˜๋Š” ์ด์œ !!

๋ทฐ์˜ ๋ถˆํˆฌ๋ช…๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ทฐ์˜ ๊ทธ๋ ค์ง„ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ๋’ค์— ํ•ด๋‹นํ•˜๋Š” ๋ทฐ๋“ค์€ ์ „๋ถ€ ๊ทธ๋ ค์ง€์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ž˜์„œ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค ! ์•„ํ•˜ ์•”๋ง‰์ปคํŠผ ๊ฐ™์€๊ฑฐ๊ตฌ๋‚˜~~~ 

๊ทธ๋Ÿผ ํˆฌ๋ช…๋„๋ฅผ ์กฐ์ ˆํ•˜๋Š” opacity์™€๋Š” ๋ญ๊ฐ€ ๋‹ค๋ฅผ๊นŒ?

opacity๋Š” ๋ถˆํˆฌ๋ช…๋„๋ฅผ ์กฐ์ ˆํ•œ๋‹ค. ์ฆ‰,  0.0 (ํˆฌ๋ช…) ๊ฐ’๋ถ€ํ„ฐ 1.0 (๋ถˆํˆฌ๋ช…) ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š” ๊ฐ’์ด์–ด์•ผ ํ•˜๋ฉฐ, ๋ฒ—์–ด๋‚˜๋Š” ๊ฐ’์€ ์ตœ์†Œ ๊ฐ’ ๋˜๋Š” ์ตœ๋Œ“๊ฐ’์œผ๋กœ ๊ณ ์ •๋œ๋‹ค. (์ฆ‰ 0๊ณผ 1๋กœ ๊ณ ์ •๋œ๋‹ค๋Š” ๋ง!) 

์•„ํ•˜ !! isOpaque() ๋Š” ์™„์ „ ํˆฌ๋ช… / ๋ถˆํˆฌ๋ช…์˜ ์—ฌ๋ถ€๋ฅผ ๋ถˆ๊ฐ’์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š”๊ฑฐ๊ณ , opacity๋Š” ๋ถˆํˆฌ๋ช…๋„๋ฅผ ์กฐ์ ˆํ• ๋–„ ์‚ฌ์šฉํ•˜๊ฒ ๊ตฌ๋‚˜ ๋ผ๊ณ  ์•Œ ์ˆ˜ ์žˆ๊ฒ ๊ณ , ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ฌ๋ฆฌ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๊ฒ ๊ตฌ๋‚˜ ์ƒ๊ฐ๋œ๋‹น ^___^ 

alpha ๋„ ๋ทฐ์˜ ํˆฌ๋ช…๋„๋ฅผ ์กฐ์ ˆํ•œ๋‹ค.

ํˆฌ๋ช…๋„๋ฅผ ์กฐ์ ˆํ•˜๋Š” ๊ฒƒ ์ค‘, alpha๋ผ๋Š” ๊ฐ’๋„ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. opacity์™€ ๊ฐ™๊ฒŒ 0.0(ํˆฌ๋ช…)๋ถ€ํ„ฐ 1.0(๋ถˆํˆฌ๋ช…)ํ•œ ๊ฐ’์œผ๋กœ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ทฐ ์ž์ฒด์˜ ํˆฌ๋ช…๋„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค๋Š”๋ฐ,,,, ๊ทธ๋Ÿผ ๊ตฌ์ฒด์ ์œผ๋กœ opacity์™€๋Š” ์ฐจ์ด์ ์ด ๋ญ˜๊นŒ ใ…‹ใ…‹ใ…‹

์•„!!! ๊ฐ‘์ž๊ธฐ ์ƒ๊ฐ๋‚œ๊ฑด๋ฐ, ๋ณดํ†ต opacity๋Š” ์ƒ‰์ƒ์— ๋Œ€ํ•œ ๋ถˆํˆฌ๋ช…๋„๋ฅผ ์ค„๋•Œ ํ•จ๊ป˜ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. alpha๊ฐ€ ์™œ '๋ทฐ ์ž์ฒด์˜' ๋ผ๋Š” ๋ง์„ ๊ฐ•์กฐํ–ˆ๋‚˜ ์ƒ๊ฐํ•ด๋ณด๋ฉด, ๋ทฐ ์ž์ฒด์˜ ๋ถˆํˆฌ๋ช…๋„๋ฅผ ์กฐ์ ˆํ• ๋•Œ๋Š” ์ฃผ๋กœ alpha๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ƒ‰์ƒ๊ฐ’์— ๋Œ€ํ•œ ๋ถˆํˆฌ๋ช…๋„๋ฅผ ์กฐ์ ˆํ• ๋•Œ๋Š” oapcity๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค!

alpha๊ฐ’์„ 0์œผ๋กœ ๋‘์–ด์„œ hidden ๊ณผ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋‚ด๊ธฐ๋„ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค!! 

๐Ÿ™Œ๐Ÿป ์ •๋ฆฌํ•˜์ž๋ฉด 

1. isOpaque() ๋Š” ๋ทฐ๊ฐ€ ํˆฌ๋ช…ํ•œ์ง€, ๋ถˆํˆฌ๋ช…ํ•œ์ง€์— ๋Œ€ํ•œ Bool๊ฐ’์œผ๋กœ ์ •์˜ํ•œ๋‹ค.
2. Opacity๋Š” 0.0(ํˆฌ๋ช…)~1.0(๋ถˆํˆฌ๋ช…)๊นŒ์ง€ ๊ฐ’์œผ๋กœ ๋‚˜ํƒธ๋‚ผ ์ˆ˜ ์žˆ๊ณ , ์ฃผ๋กœ ์ƒ‰์ƒ์— ๋Œ€ํ•œ ๋ถํˆฌ๋ช…๋„๋ฅผ ์กฐ์ ˆํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
3. alpha๋Š” 0.0(ํˆฌ๋ช…)~1.0(๋ถˆํˆฌ๋ช…)๊นŒ์ง€ ๊ฐ’์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ณ , ๋ทฐ ์ž์ฒด์˜ ํˆฌ๋ช…๋„๋ฅผ ์กฐ์ ˆํ•œ๋‹ค. ๋ทฐ์— ๋Œ€ํ•œ alpha๊ฐ’์„ 0์œผ๋กœ ์ฃผ๋ฉด, hidden๊ณผ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•