UIView

윤주현·2023년 7월 12일

UIKit

목록 보기
7/9

메소드

init

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:) 대신 위와 같은 초기화 메소드를 사용할 수 있다.

convert(_:from:)

func convert(
    _ rect: CGRect,
    from view: UIView?
) -> CGRect

한 뷰의 좌표 시스템을 다른 뷰의 좌표 시스템으로 변환하는 메소드.
뷰 컨트롤러 안에있는 UI의 좌표를 얻으려고 할때 좌표가 이상하게 나오는 경우가 있다. 그 이유는 좌표 시스템이 뷰 컨트롤러 기준이 아니라 그 UI가 속해있는 뷰의 좌표 시스템을 보여주기 때문이다. 이럴때는 좌표시스템을 뷰 컨트롤러를 기준으로 변경해주어야 하는데 그때 이 메소드를 사용하면 된다.

example

// 뷰 컨트롤러 안에 있는 텍스트 필드의 좌표를 뷰 컨트롤러 좌표로 변환하는 코드

let convertedTextFieldFrame = view.convert(currentTextField.frame, from: currentTextField.superview)

Tip

  • 커스텀 뷰를 만들때는 외부 뷰에서 커스텀 뷰의 배치를 결정할 수 있게 커스텀 뷰 내부의 컨트롤들은 따로 스페이싱을 주지 않는다.

0개의 댓글