15 Apr 2018
|
iOS
view
์ปค์คํ
UIView
awakeFromNib
์ปค์คํ
๋ทฐ ๋ง๋ค๊ธฐ์ ์ฅ์
๋ง์ฝ ํ๋์ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ์ฌ๋ฌ UIImageview(ํน์ UIView) ํ์
์ ์๋ธ๋ทฐ๋ฅผ ์ถ๊ฐํด์ผ ํ ๋, ๊ทธ ์ฌ๋ฌ ์๋ธ๋ทฐ๋ค์ ํฌ๊ธฐ๋, ํ
๋๋ฆฌ, ๋ฅ๊ทผ ๋ชจ์๋ฆฌ์ ๊ฐ์ ์์ฑ์ด ๋ชจ๋ ๋์ผํ ๊ฒฝ์ฐ๊ฐ ์์ ๊ฒ์ด๋ค. ๋ง์ฝ ์ด ๋ ๋ชจ๋ ์๋ธ๋ทฐ์ ์์ฑ์ ์์ ๋ทฐ ์ปจํธ๋กค๋ฌ์์ ์ง์ ํด์ค๋ค๋ฉด ๋ฐ๋ณต๋๋ ์ฝ๋๊ฐ ๋ฐ์ํ ์ ์๊ณ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ์ฝ๋๊ฐ ๋นํจ์จ์ ์ผ๋ก ๊ธธ์ด์ง ๊ฒ์ด๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์๋, UIView๋ฅผ ์์๋ฐ๋ ์ปค์คํ
์ฝ์ฝ์ํฐ์น ํด๋์ค๋ฅผ ํ๋ ๋ง๋ค์ด์, ๋ด๊ฐ ์ํ๋ ์์ฑ์ ์ง์ ํด์ฃผ๊ณ , ์ถ๊ฐํ ์๋ธ๋ทฐ๋ค์ ํ์
์ ์ปค์คํ
๋ทฐ ํ์
์ผ๋ก ์ง์ ํด์ฃผ๋ฉด ๋๋ค.
์ฌ๊ธฐ์ ์๋ธ๋ทฐ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์๋ฐ๋ผ(๋ทฐ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ) ํธ์ถ๋๋ UIView์ ์ด๊ธฐํ ํจ์๊ฐ ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์, ์ปค์คํ
๋ทฐ์ ์ด๋์ ์์ฑ์ค์ ์ฝ๋๋ฅผ ๋ฃ์ด์ผ ํ๋์ง๊ฐ ์ค์ํ๋ค!
UIView์ ์์ฑ์
์์์ ์ธ๊ธํ๋ฏ์ด ๋ทฐ๊ฐ ์์ฑ๋๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ํธ์ถ๋๋ ์ด๊ธฐํํจ์๋ฅผ ์์๋์ผ๋ฉด ์ดํด๊ฐ ์ฌ์ธ ์ ์์ด์ ์คํ ํฌ๋ iOS๊ฐ์ ์ค ๊ด๋ จ ๋ถ๋ถ์ ์ ๋ฆฌํด๋ณด์๋ค.
- UIView๋ ๋๊ฐ์ ํ์ ์์ฑ์๊ฐ ์๋ค. ๋ฐ๋ก
init(frame: CGRect)
๊ณผ init(coder: NSCoder)
์ด๋ค.
init(coder: NSCoder)
: ์คํ ๋ฆฌ๋ณด๋ ์์ ๋์ค๋ฉด์ UIView๋ฅผ๋ง๋ค๋ ๋ง๋ค์ด์ง๋ ์์ฑ์.
- ๋ทฐ๋ฅผ ์คํ ๋ฆฌ๋ณด๋์์ ๋๋๊ทธํด์๋ง๋ค์๋๋ฐ, ๋ง์ฝ ์ฑ์ด ์คํ๋ ๋ ์คํ ๋ฆฌ๋ณด๋๊ฐ ์ฌ๊ตฌ์ฑ๋๋ฉด ์ด ์์ฑ์๊ฐ ํธ์ถ๋๋ฉด์ UIView๊ฐ ๋ง๋ค์ด์ง.
init(frame: CGRect)
: ์ฝ๋๋ก ๋ทฐ๋ฅผ ๋ง๋ค๋ ํธ์ถ๋จ. ๋ฐ๋์ CGRectํ์
์ผ๋ก ํ๋ ์์ ์ ํด์ฃผ๊ณ UIView๋ฅผ ์์ฑ
let rect = CGRect(x: 10, y: 10, width: 100, height: 100)
let myView = UIView(frame: rect)
์ปค์คํ
๋ทฐ์ ๋ทฐ ์์ฑ ์ง์ ํ๊ธฐ
๋ง์ฝ ์ปค์คํ
๋ทฐ๋ฅผ ์์๋ฐ์ ๋ชจ๋ ๋ทฐ์ ๋ฅ๊ทผ ๋ชจ์๋ฆฌ(cornerRadius)์์ฑ์ ๋ถ์ฌํ๊ณ ์ถ์ ์ํฉ์ผ ๋๋ ์๋์ ๋ฐฉ๋ฒ๋ค์ด ์๋ค.
addSubVIew()๋ก ์๋ธ๋ทฐ๋ฅผ ์ถ๊ฐํ์๋
- ์ฝ๋๋ก ์ถ๊ฐํ view์ ์์ฑ์ ์ ์ฉํ๊ธฐ ์ํด์๋
init(frame:)
์ ์์ฑ์ ์ง์ ํด์ค์ผํ๋ค.
- ๋ค๋ง,
init(frame:)
์๋ ๋ฌด์กฐ๊ฑด frame๊ฐ์ ๋ฃ์ด์ค์ผํ๊ธฐ๋๋ฌธ์, ์๋ ์์์ฝ๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก convenience init์ ์์ frame๊ฐ์ ๋ฃ์ด์ค๋ ๋๋ค.
- ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ํ๋ frame๊ฐ์ ์์๋ชจ๋์์ ๋ฐ๊ฟ์ค์ผํ๋ค.
override init(frame: CGRect) { // by code
super.init(frame: frame)
self.layer.cornerRadius = 5.0
self.clipsToBounds = true
}
convenience init() {
self.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
}
์ธํฐํ์ด์ค ๋น๋์์ ์๋ธ๋ทฐ๋ฅผ ์ถ๊ฐํ์ ๋
- ์ธํฐํ์ด์ค๋น๋์์ customํด๋์ค๋ก ์ง์ ํ ๋ทฐ๋
required init?(coder aDecoder:)
๊ฐ ํธ์ถ๋๋ค.
- (์คํ ๋ฆฌ๋ณด๋์์ ๋ทฐ ์ปจํธ๋กค๋ฌ๊ฐ ๊ฐ์ง ๋ทฐ์ ํ์
์ ์ค๋ฅธ์ชฝ ํญ custom class์์ ๋ด๊ฐ ์ถ๊ฐํ ์ปค์คํ
๋ทฐ ํด๋์ค ์ด๋ฆ ์
๋ ฅํ์ฌ ์ฐ๊ฒฐ)
- ๋ง์ฝ์ ์ด๋์ ํธ์ถ๋ ์ง ๋ชจ๋ฅด๋ฉด awakeFromNib๊ณผ ๋ convenience init์ ์ค์ ํ๋ ์ฝ๋๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. ๋ ๊ผผ์์๋ ๊ผผ์๋ ์๋ค..
override func awakeFromNib() {
// config setting code
super.awakeFromNib()
}
required init?(coder aDecoder: NSCoder) {
// config setting code
fatalError("init(coder:) has not been implemented")
}
+ ์ถ๊ฐ. awakeFromNib()
awakeFromNib()์ ์ธํฐํ์ด์ค ๋น๋์์ ๋ทฐ๊ฐ ๋ง๋ค์ด์ก์๋ ํธ์ถ๋๋ค๊ณ ๋ง ์๊ณ ์์๋๋ฐ, ๊ทธ๋ณด๋ค ๋ ์์ธํ๊ฒ ์ ํ์๊ฐ ์์ด์ ์ถ๊ฐ
awakeFromNib์ด ํธ์ถ๋๋ ์์
awakeFromNib()
์ ๊ฐ์ฒด๊ฐ ์ด๊ธฐํ(์ธ์คํด์คํ)๋ ํ ํธ์ถ๋๋ค.
- UIView์์ ์์๋ฐ์ ์ปค์คํ
View ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ์ธํฐํ์ด์ค๋น๋์ ์ง์ ํ๋ฉด(์ค๋ฅธ์ชฝ ํญ inspector์์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก) ์ปค์คํ
ํด๋์ค๋ ์์นด์ด๋ธ๋์ด ์๋ค๊ฐ ์ธ์์นด์ด๋ธ๋จ(xibํ์ผ์)
- ์ด ๋ init(coder:)๊ฐ ํธ์ถ๋๊ณ ๋ด๋ถ ์์ฑ์ด ์ด๊ธฐํ๋จ
- ์ผ๋ถ๋ ์ด ๋ ์๋ฏธ์๋ ๊ฐ์ผ๋ก ์ด๊ธฐํ๋๊ฑฐ๋ IBOutlet์ ๋น๋กฏํ ๊ฐ์ฒด ์ฐธ์กฐ ๊ด๊ณ๊ฐ ๋ถ๋ช
ํํ ์ ์์
- init ์์ ์์๋ frame๊ณผ ๊ด๋ จ๋ ํฌ๊ธฐ, ์์น ๋ฑ ๋ทฐ๊ฐ ์๋ฒฝํ๊ฒ ๋ง๋ค์ด์ง์ง ์์ ์ํ
- ์ด์๊ฐ์ด ์ธํฐํ์ด์ค ๋น๋์์ ์ฐ๊ฒฐ๋ ๊ฐ์ฒด์ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ ๋
awakeFromNib()
์ ์ฌ์ฉํจ
- ์ด๋ ๊ฒ
awakeFromNib()
์ ๊ฐ์ฒด๋ฅผ ์ธ์คํด์คํ ํ ํ(init()
์ด ํธ์ถ๋ ํ) ํธ์ถ๋๋ค.
- (IBOutlet์ด ์์ด๋
awakeFromNib()
์ ํธ์ถ๋จ)
awakeFromNib()๊ณผ init()์์ ๋ชจ๋ ์ค์ ํด์ผ ํ๋ ์ด์
๋ทฐ๋ฅผ ๋ง๋ค๊ณ ์ปค์คํ
๋ทฐ๋ฅผ ์ธํฐํ์ด์ค๋น๋์์ ์ฐ๊ฒฐํ์๋ init(frame:), init(coder:)์ awakeFromNib()๋ ๊ตฐ๋ฐ ๋ชจ๋์์ ์ค์ ์ ํด์ค๋ค
์ ์๋ฏธ
- ๊ทธ๋์ ์ด๊ธฐํ๊ฐ ๋๋๊ณ ์ค์ awakeFromNib ์์ ์์ ์ถ๊ฐ์ ์ธ ์์
์ด ํ์ํ ๊ฒฝ์ฐ ํด์ผํจ.
- ์ปค์คํ
๋ทฐ๋ฅผ ๋ง๋๋ ๊ฐ๋ฐ์ ์
์ฅ์์๋ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ
init(frame:)
์ ํธ์ถํด์ ์ฝ๋๋ก ์์ฑํ ์ง, ์ธํฐํ์ด์ค ๋น๋์์ ์ง์ ํด์ ์ฌ์ฉํ ์ง ๋ถ๋ช
ํํ๋๊น ์ฝ๋๋ก ๋ง๋ค๋ ์ธํฐํ์ด์ค๋น๋๋ก ์์
ํ๋ ๋ ๋ค ๋์ผํ ๋์์ด ๊ฐ๋ฅํ๋๋ก ์ง์ ํ๋ ๊ฒ ์ข์
- JK์ ์ฝ๋ฉํธ ์ถ๊ฐ
๊ฒฝํ์ init(coder:) ์์ ์๋ frame ์ด๋ Layer ๊ด๋ จ์๋ ๊ฐ๋ค,
awakeFromNib ์์ ์๋ frame ์ด๋ Layer ๊ด๋ จ๋ ๊ฐ๋ค์ ์ค์ ํ๋๋ก ๊ตฌํํ๋ฉด ๋ฉ๋๋ค.
init(frame:) ์ ์ด๋ฏธ frame ์ ๋ณด๊ฐ ์์ผ๋๊น ๊ด์ฐฎ๊ตฌ์.
๋ฌผ๋ก autoLayout ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฒฝ์ฐ๋ awakeFromNib ๋ณด๋ค ๋ ๋ค์ ํด์ผํฉ๋๋ค.
์ฐธ๊ณ ๋งํฌ 1, ์ฐธ๊ณ ๋งํฌ 2, ์ฐธ๊ณ ๋งํฌ 3