๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
iOS

[iOS] addsubview()์™€ ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ subview ์ถ”๊ฐ€ํ•˜๊ธฐ

by lizzydev 2023. 2. 14.

๋ทฐ ๊ณ„์ธต ๊ตฌ์กฐ ์† ํ•˜์œ„๋ทฐ ์ถ”๊ฐ€ํ•˜๊ธฐ - addSubview()

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

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

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

์•„๋ž˜ ์˜ˆ์ œ์ฒ˜๋Ÿผ ๋ทฐ๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ๋ทฐ์˜ ์™ผ์ชฝ ์ƒ๋‹จ ๋ชจ์„œ๋ฆฌ๊ฐ€ ์ถ”ํ›„ ์„ค์ •๋  superview์˜์ขŒํ‘œ ์‹œ์Šคํ…œ์—์„œ (10, 10) ์ง€์ ์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค.

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

์œ„ ์ฝ”๋“œ ์ฒ˜๋Ÿผ ์ƒ์„ฑํ•œ ๋ทฐ๋ฅผ superview์˜ subview๋กœ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด addSubview(_:)๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

addSubview๋ฅผ ํ†ตํ•ด ๋ทฐ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ subview๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. subview๋Š” ์ถ”๊ฐ€ ๋  ๋•Œ ์ด๋ฏธ ์ถ”๊ฐ€๋˜์–ด์žˆ๋˜ ๊ธฐ์กด subview๋“ค ์ฆ‰, siblingview๋“ค ์œ„์— ๋ฐฐ์น˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

class ViewController: UIViewController {

		let rect = CGRect(x: 10, y: 10, width: 100, height: 100)
		let myView = UIView(frame: rect)
   
    override func viewDidLoad() {
        super.viewDidLoad()
        setLayout()
    }
    func setLayout() {
        view.addSubview(myView) //view๋Š” viewcontroller๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ตœ์ƒ์œ„ UIView
    }
}

insertSubview(_:aboveSubview:) and insertSubview(_:belowSubview:) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ธŒ๋ทฐ์˜ ์ƒ๋Œ€์ ์ธ z-์ˆœ์„œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ ์ถ”๊ฐ€๋œ ์„œ๋ธŒ๋ทฐ์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋ ค๋ฉด exchangeSubview(at:withSubviewAt:) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ apple์˜ ๊ณต์‹ api๋Š” ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ์„œ๋ธŒ๋ทฐ๋งŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— addSubview๋ฅผ ๊ต‰์žฅํžˆ ์—ฌ๋Ÿฌ๋ฒˆ ์จ์ค˜์•ผํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋‹จ์˜ extension์„ ์‚ฌ์šฉํ•˜๋ฉด view ๋ฐฐ์—ด์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„ฃ์–ด ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์„œ๋ธŒ๋ทฐ๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

extension UIView {
    func addSubviews(_ views: [UIView]) {
        views.forEach { self.addSubview($0) }
    }
}

์ด๋ ‡๊ฒŒ ์›ํ•˜๋Š” ๋ทฐ๋“ค์„ ์ƒ์„ฑํ•˜๊ณ  ๊ณ„์ธต๊ตฌ์กฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€ ํ›„ ์—๋Š” ์˜คํ†  ๋ ˆ์ด์•„์›ƒ์„ ์„ค์ •ํ•˜์—ฌ ๋ทฐ์˜ ํฌ๊ธฐ์™€ ์œ„์น˜๊ฐ€ ๋‚˜๋จธ์ง€ ๋ทฐ ๊ณ„์ธต ๊ตฌ์กฐ์˜ ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ์–ด๋–ป๊ฒŒ ๋ณ€ํ•˜๋Š”์ง€ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

 

UIView | Apple Developer Documentation