override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
커스텀 UIView를 만들때 위와 같이 2가지의 초기화 메소드가 필요하다.
init(text: String, isOn: Bool) {
label = makeLabel(withText: text)
onOffSwitch = makeSwitch(isOn: isOn)
super.init(frame: .zero)
}
초기화할때 파라미터를 전달하고 싶다면 override init(frame:) 대신 위와 같은 초기화 메소드를 사용할 수 있다.
func convert(
_ rect: CGRect,
from view: UIView?
) -> CGRect
한 뷰의 좌표 시스템을 다른 뷰의 좌표 시스템으로 변환하는 메소드.
뷰 컨트롤러 안에있는 UI의 좌표를 얻으려고 할때 좌표가 이상하게 나오는 경우가 있다. 그 이유는 좌표 시스템이 뷰 컨트롤러 기준이 아니라 그 UI가 속해있는 뷰의 좌표 시스템을 보여주기 때문이다. 이럴때는 좌표시스템을 뷰 컨트롤러를 기준으로 변경해주어야 하는데 그때 이 메소드를 사용하면 된다.
// 뷰 컨트롤러 안에 있는 텍스트 필드의 좌표를 뷰 컨트롤러 좌표로 변환하는 코드
let convertedTextFieldFrame = view.convert(currentTextField.frame, from: currentTextField.superview)