ViewController는 iOS 앱 개발에서 빼놓을 수 없는 요소이다. 구조적으로 어떻게 구성되었는지 알아보고, 어떤 life cycle을 가지는지 이해해보자. 그럼 시작하자.
View management model
역할
templates
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// VC내부에 property로 있는 view가 화면에 보이기 위해 load 되었을 때 호출됨
// VC 생성 시점과 view가 보이는 시점은 차이가 있음
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// App이 메모리 부족 경고를 받을 경우 호출됨
}
}
// code
public init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)
// storyboard
public init?(coder: NSCoder)
parameter
UIViewController.init()
인 경우 nil로 넘어옴활용
class ViewController: UIViewController {
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrnil, bundle: nibBundleOrNil)
// 초기화 코드 작성
// 해당 시점에는 view가 없음
// view와 관계없는 object 초기화 용도로 좋음
}
}
class ViewController: UIViewController {
required init?(coder: NSCoder) {
super.init(coder: coder)
// 상등
}
}
override func loadView() {
let view = UIView(frame: UIScreen.main.bounds) // 스크린 크기에 맞춘 view 생성
view.backgroundColor = UIColor.green
view.autoresizingMask = [.flexibleWidth, .flexibleHeight] // window의 크기 변경에 맞춰 변하도록 설정
self.view = view
}
presentedViewController
로 접근 가능하다.형태
// code
init(frame:)
init() // default parameter = CGRect.zero
// storyboard
init(coder:)
templates
override init(frame: CGRect) {
super.init(frame: frame)
// write code
}
required init?(coder: NScoder) {
super.init(coder: coder)
// write code
}
CGRect
UIScreen.main.scale
로 접근 가능view.addSubview(subview)
subview.removeFromSuperView()