init(frame: CGRect)
- Interface Builder에서 쓰이지 않고, 코딩(Programmatically)으로 UIView를 상속받은 클래스를 만들 때 사용
- ex) let sampleButton = UIButton(frame: CGRect(x: 3, y: 0, width: 100, height: 200))
required init?(coder: NSCoder)
- Interface Builder에서 생성되는 초기화 구문
Interface Builder란 간단하게 말해서는 xib, nib, storyboard를 사용하여 VIew를 작업하는 것!
View나 Button과 같은 것들을 커스텀하는 경우, 위 두가지의 초기화 구문이 필수
override init(frame: CGRect) {
super.init(frame: frame)
setupView()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupView()
}
awakeFromNib()
- Interface Builder에서 객체가 init(coder:)로 초기화된 후 호출됨
- IB에서 inspector와 같은 방법으로 값을 조정하면 위 커스텀 클래스는 아카이브되어 있다가 언아카이브됨(xib파일로)
- init 시점에서는 frame과 관련된 크기, 위치 등 뷰가 완벽하게 만들어지지 않은 상태
awakeFromNib()와 init()에서 모두 설정해야 하는 이유
뷰를 만들고 커스텀 뷰를 IB에서 연결했을 땐, init(frame:), init(coder:)와 awakeFromNib() 구준데 모두에서 설정을 해준다
경험상 init(coder:) 시점에는 frame 이나 Layer 관련없는 값들, -> frame정보가 없으므로
awakeFromNib 시점에는 frame 이나 Layer 관련된 값들을 설정하도록 구현하면 됩니다.
init(frame:) 은 이미 frame 정보가 있으니까 괜찮구요.
물론 autoLayout 처리를 하는 경우는 awakeFromNib 보다 더 뒤에 해야합니다.
'iOS' 카테고리의 다른 글
[iOS] UIViewController (0) | 2021.03.01 |
---|---|
[iOS] 프레임워크 끄적 (0) | 2021.03.01 |
[iOS] Delegate 패턴에 대해 알아보자 (0) | 2021.01.22 |
[iOS] Local Push Notification 로컬 알림 처리하기 (0) | 2021.01.21 |
[iOS] Local Push Notification 로컬 알림 (0) | 2021.01.21 |