๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS

[UIKit] UIView(2)

by hyebin (Helia) 2022. 3. 28.
๋ฐ˜์‘ํ˜•

View ์ƒ์„ฑํ•˜๊ธฐ

์ผ๋ฐ˜์ ์œผ๋กœ ์Šคํ† ๋ฆฌ๋ณด๋“œ์— ๋ทฐ๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ๋ถ€ํ„ฐ ์บ”๋ฒ„์Šค์— ๋Œ์–ด๋‹ค ๋†“์•„์„œ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ๋„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ทฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฏธ๋ž˜์˜ super ๋ทฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ดˆ๊ธฐ ํฌ๊ธฐ์™€ ์œ„์น˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์ฝ”๋“œ๋Š” ๋ทฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  super ๋ทฐ์˜ ์ขŒํ‘œ๊ณ„์— ์žˆ๋Š” ์ (10, 10)์— ์™ผ์ชฝ ์ƒ๋‹จ ๋ชจ์„œ๋ฆฌ๋ฅผ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

 

let rect = CGRect(x: 10, y: 10, width: 100, height: 100)
let myView = UIView(frame: rect)

 

๋‹ค๋ฅธ ๋ทฐ์— ํ•˜์œ„ ๋ทฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด super ๋ทฐ์—์„œ addSubView(_:) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์„ธ์š”.

๋ทฐ์— ํ•˜์œ„ ๋ทฐ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ iOS์—์„œ๋Š” ํ˜•์ œ ๋ทฐ๊ฐ€ ์„œ๋กœ ๊ฒน์ณ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • addSubView(_:): ๋‹ค๋ฅธ ๋ทฐ ๋์— ํ•˜์œ„ ๋ทฐ๋ฅผ ์ถ”๊ฐ€
  • insertSubview(_:avoveSubView:): ๋‹ค๋ฅธ ๋ทฐ ์œ„์— ๋ทฐ ์‚ฝ์ž…
  • insertSubview(_:belowSubView:): ๋‹ค๋ฅธ ๋ทฐ ์•„๋ž˜์— ๋ทฐ ์‚ฝ์ž…
  • exchange Subview(at: with Subview At:): ์ง€์ •ํ•œ ์ธ๋ฑ์Šค์˜ ํ•˜์œ„ ๋ทฐ๋ฅผ ๊ตํ™˜

 

๋ทฐ ๋“œ๋กœ์ž‰ ์‚ฌ์ดํด

๋ทฐ ๋“œ๋กœ์ž‰์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•„์š”์— ๋”ฐ๋ผ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ทฐ๊ฐ€ ์ฒ˜์Œ ํ‘œ์‹œ๋˜๊ฑฐ๋‚˜ ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ๋ทฐ์˜ ์ „์ฒด๋‚˜ ์ผ๋ถ€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ์‹œ์Šคํ…œ์—์„œ ๋ทฐ์— ์ฝ˜ํ…์ธ ๋ฅผ ๊ทธ๋ฆฌ๋„๋ก ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

UIKit ๋˜๋Š” Core Graphics๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์ฝ˜ํ…์ธ ๊ฐ€ ํฌํ•จ๋œ ๋ทฐ์˜ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ์€ ๋ณด๊ธฐ์˜ draw(_:) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฉ”์„œ๋“œ๋Š” ๊ทธ๋ž˜ํ”ฝ ์ฝ˜ํ…์ŠคํŠธ์— ๋ทฐ ์ฝ˜ํ…์ธ ๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ๋ทฐ ์ฝ˜ํ…์ธ ๊ฐ€ ํ™”๋ฉด์ƒ์— ์‹œ๊ฐ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

 

๋ทฐ์˜ ์ฝ˜ํ…์ธ ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋‹ค์‹œ ๊ทธ๋ ค์ ธ์•ผ ํ•œ๋‹ค๊ณ  ์‹œ์Šคํ…œ์— ์•Œ๋ฆฌ๋Š” ๊ฒƒ์€ ๊ฐœ๋ฐœ์ž์˜ ์ฑ…์ž„์ž…๋‹ˆ๋‹ค.

๋ทฐ์˜ setNeedsDisplay() ๋˜๋Š” setNeedsDisplay(_:) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ ๋“œ๋กœ์ž‰ ์‚ฌ์ดํด ๋™์•ˆ ๋ทฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์‹œ์Šคํ…œ์— ์•Œ๋ฆฝ๋‹ˆ๋‹ค.

๋ทฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด์„  ๋‹ค์Œ ๋“œ๋กœ์ž‰ ์‚ฌ์ดํด๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๋ทฐ์—์„œ ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋™์‹œ์— ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

OpenGL ES๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ฆฌ๋Š” ๊ฒฝ์šฐ GLKView ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

 

์• ๋‹ˆ๋ฉ”์ด์…˜

๋ทฐ ํ”„๋กœํผํ‹ฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋“ค์„ ์• ๋‹ˆ๋ฉ”์ด์…˜ํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ํ˜„์žฌ ๊ฐ’์—์„œ ์‹œ์ž‘ํ•ด์„œ ์ง€์ •ํ•œ ๊ฐ’์œผ๋กœ ๋๋‚˜๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

UIView ํด๋ž˜์Šค์˜ ํ”„๋กœํผํ‹ฐ ์ค‘์—์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜ํ™” ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค

  • frame
    • var frame: CGRect {get set}
    • super ๋ทฐ์˜ ์ขŒํ‘œ๊ณ„์—์„œ ๋ทฐ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ํ”„๋ ˆ์ž„ ์‚ฌ๊ฐํ˜•
  • bounds
    • var bounds: CGRect {get set}
    • ์ž์ฒด ์ขŒํ‘œ๊ณ„์—์„œ ๋ทฐ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ฒฝ๊ณ„ ์‚ฌ๊ฐํ˜•
  • center
    • var center: CGPoint {get set}
    • ๋ทฐ์˜ ์‚ฌ๊ฐํ˜• ํ”„๋ ˆ์ž„์˜ ์ค‘์‹ฌ์ 
  • transform
    • var transform: CGAffineTransform {get set}
    • ๋ทฐ์˜ ๊ฒฝ๊ณ„์˜ ์ค‘์‹ฌ์„ ๊ธฐ์ค€์œผ๋กœ ๋ทฐ์— ์ ์šฉ๋˜๋Š” ๋ณ€ํ™˜์„ ์ง€์ •
  • alpha
    • alpha: CGFloat {get set}
    • ๋ทฐ์˜ ์•ŒํŒŒ ๊ฐ’, ํˆฌ๋ช…๋„ 
  • backgroundColor
    • @NSCopying var backgroundColor: UIColor? {get set}
    • ๋ทฐ์˜ ๋ฐฐ๊ฒฝ์ƒ‰

๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ™”ํ•˜๋ ค๋ฉด UIViewPropertyAnimator ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฐ์ฒด์˜ ํ•ธ๋“ค๋Ÿฌ ๋ธ”๋ก์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ทฐ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

์ด ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ์ง€์†์‹œ๊ฐ„๊ณผ ํƒ€์ด๋ฐ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‹ค์ œ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๊ทธ ์ฆ‰์‹œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ํ”„๋กœํผํ‹ฐ ๊ธฐ๋ฐ˜ ์• ๋‹ˆ๋ฉ”์ดํ„ฐ๋Š” ์‹คํ–‰ ์ค‘์— ๋ฉˆ์ถ”๊ฑฐ๋‚˜ ๋Œ€ํ™”ํ˜•์œผ๋กœ ๊ตฌ๋™๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • @MainActor class UIViewPropertyAnimator: NSObject
  • ๋ทฐ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์• ๋‹ˆ๋ฉ”์ด์…˜ํ™” ํ•˜๊ณ  ํ•ด๋‹น ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ๋™์  ์ˆ˜์ •์„ ํ—ˆ์šฉํ•˜๋Š” ํด๋ž˜์Šค

 

์Šค๋ ˆ๋”ฉ ๊ณ ๋ ค์‚ฌํ•ญ

์•ฑ์˜ ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ์กฐ์ž‘์€ ๋ฐ˜๋“œ์‹œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์ž‘์—…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ UIView ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ฝ”๋“œ๋„ ๋ฐ˜๋“œ์‹œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ๋™์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ทœ์น™์ด ํ•„์š” ์—†๋Š” ์œ ์ผํ•œ ๊ฒฝ์šฐ๋Š” ๋ทฐ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๋ฟ์ž…๋‹ˆ๋‹ค.

๊ทธ ์™ธ์—๋Š” ๋ฐ˜๋“œ์‹œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ๋งŒ ์ž‘์—…ํ•˜์„ธ์š”

 

 

 

๋ฐ˜์‘ํ˜•

'๐ŸŽ iOS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[UIKit] UITableView  (0) 2022.04.01
[UIKit] UIView(3)  (0) 2022.03.30
[UIKit] UIView(1)  (0) 2022.03.25
[UIKit] UIApplication  (0) 2022.03.24
[UIKit] ์•ฑ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด  (0) 2022.03.22