애플 UIView
은 문서에서 서브 클래 싱하는 방법을 명확하게 정의했다 .
특히 살펴보고, 아래의 목록을 확인 initWithFrame:
하고 layoutSubviews
. 전자는 당신 UIView
의 프레임을 설정하기위한 것이고 후자는 프레임과 서브 뷰의 레이아웃을 설정하기위한 것입니다.
또한 프로그래밍 방식 initWithFrame:
으로 인스턴스화하는 경우에만 호출됩니다 UIView
. 펜촉 파일 (또는 스토리 보드)에서로드하는 경우 initWithCoder:
사용됩니다. 그리고 initWithCoder:
프레임 에서 아직 계산되지 않았으므로 Interface Builder에서 설정 한 프레임을 수정할 수 없습니다. 이 답변에서 제안한 대로 프레임을 설정하기 위해 전화 initWithFrame:
를 생각할 수 있습니다 initWithCoder:
.
마지막으로 UIView
펜촉 (또는 스토리 보드)에서로드하면 awakeFromNib
사용자 정의 프레임 및 레이아웃 초기화를 수행 할 수있는 기회가 awakeFromNib
있습니다.
의 문서에서 NSNibAwaking
(현재 의 문서로 대체 됨 awakeFromNib
) :
다른 객체에 대한 메시지는 awakeFromNib 내에서 안전하게 보낼 수 있습니다.이 시간까지 모든 객체가 보관 해제되고 초기화됩니다 (물론 반드시 깨어날 필요는 없습니다).
자동 레이아웃을 사용하면 뷰의 프레임을 명시 적으로 설정해서는 안된다는 점도 주목할 가치가 있습니다. 대신 프레임이 레이아웃 엔진에 의해 자동으로 계산되도록 충분한 구속 조건 세트를 지정해야합니다.
문서 에서 바로 :
재정의하는 방법
초기화
initWithFrame:
이 방법을 구현하는 것이 좋습니다. 이 방법 외에도 또는이 방법 대신 사용자 정의 초기화 방법을 구현할 수도 있습니다.
initWithCoder:
Interface Builder nib 파일에서보기를로드하고보기에 사용자 정의 초기화가 필요한 경우이 방법을 구현하십시오.
layerClass
뷰에서 백업 저장소에 다른 Core Animation 레이어를 사용하려는 경우에만이 방법을 구현하십시오. 예를 들어, OpenGL ES를 사용하여 도면을 작성하는 경우이 메소드를 대체하고 CAEAGLLayer 클래스를 리턴하려고합니다.
그리기 및 인쇄
제약
requiresConstraintBasedLayout
뷰 클래스가 제대로 작동하기 위해 제약 조건이 필요한 경우이 클래스 메서드를 구현하십시오.
updateConstraints
뷰에서 하위 뷰간에 사용자 지정 구속 조건을 작성해야하는 경우이 방법을 구현하십시오.
alignmentRectForFrame:
, frameForAlignmentRect:
뷰가 다른 뷰에 정렬되는 방식을 무시하려면이 방법을 구현하십시오.
나열한 것
sizeThatFits:
뷰 크기 조정 작업 중에 일반적으로 보는 것과 다른 기본 크기를 가지려면이 방법을 구현하십시오. 예를 들어이 방법을 사용하면 뷰가 하위 뷰를 올바르게 표시 할 수없는 지점으로 축소되는 것을 방지 할 수 있습니다.
layoutSubviews
구속 조건 또는 자동 크기 조정 동작이 제공하는 것보다 하위 뷰의 레이아웃을보다 정확하게 제어해야하는 경우이 방법을 구현하십시오.
didAddSubview:
, willRemoveSubview:
하위보기의 추가 및 제거를 추적하는 데 필요에 따라 이러한 방법을 구현하십시오.
willMoveToSuperview:
, didMoveToSuperview
뷰 계층에서 현재 뷰의 이동을 추적하는 데 필요에 따라이 메소드를 구현하십시오.
willMoveToWindow:
, didMoveToWindow
보기가 다른 창으로 이동하는 것을 추적하는 데 필요에 따라 이러한 방법을 구현하십시오.
이벤트 처리 :
touchesBegan:withEvent:
, touchesMoved:withEvent:
, touchesEnded:withEvent:
, touchesCancelled:withEvent:
직접 터치 이벤트를 처리해야하는 경우이 방법을 구현합니다. 제스처 기반 입력의 경우 제스처 인식기를 사용하십시오.
gestureRecognizerShouldBegin:
뷰에서 터치 이벤트를 직접 처리하고 연결된 제스처 인식기가 추가 작업을 트리거하지 못하게하려면이 방법을 구현하십시오.