iOS draw() 공식문서를 해석해 보자.

draw(_:)

Draws the receiver’s image within the passed-in rectangle.

전달된 사각형에 receiver의 이미지를 그린다.

Declaration

func draw(_ rect: CGRect)

Parameters

  • rect

    업데이트해야하는 뷰 범위의 일부분이다. 처음 뷰가 그려질 때 이 rectangle은 보통 눈에 보이는 뷰 전체를 말한다. 하지만 후속 드로잉 동작 중에는, rectangle은 뷰의 일부만 지정할 수 있다.

Discussion

이 메소드의 기본 구현은 아무 것도 처리하지 않는다. 뷰의 컨텐츠를 그리기 위한 Core Graphics, UIKit과 같은 기술을 사용하기위한 서브클래스들은 이 메소드를 오버라이드하고 드로잉 코드들을 구현해야한다. 뷰가 다른 방식으로 컨텐츠를 설정하는 경우는 이 메소드를 오버라이드 할 필요가 없습니다. 예를 들어, 뷰가 단지 백그라운드 색만 표시되거나 뷰가 컨텐츠를 레이어 객체를 이용하여 직접 설정한다면 오버라이드 할 필요가 없다.

이 메소드가 호출될 때 까지, UIKit는 뷰에 적합한 drawing 환경을 구성했으며 content를 렌더링하는 데 필요한 drawing 메소드와 함수를 호출할 수 있다. 특별히, UIKit은 drawing을 위한 graphics context를 생성 및 구성하고 context의 변형(transform)을 조정하여 context 원점이 뷰의 경계 사각형의 원점과 일치하도록 한다. UIGraphicsGetCurrentContext() 함수를 사용하여 graphics context를 참조할 수 있다, 하지만 draw 메소드 호출간 graphic context 가 바뀔 수 있기 때문에 graphic context에 강한 참조를 선언하면 안된다.

모든 drawing은 rect 매개변수에 지정된 사각형에 제한된다. 만약 뷰의 isOpaque 프로퍼티가 true로 설정되어있으면 draw 메소드는 지정된 사각형을 불투명한 content로 채워야 한다.

만약 UIView를 직접 서브클래스로 만들었다면, 이 메소드를 구현할 때 super 를 호출할 필요가 없다. 하지만 다른 view class를 서브클래스로 만든다면, 구현할 때 super 를 호출해야한다.

이 메소드는 뷰가 처음 표시되거나 뷰의 보이는 부분을 무효화하는 이벤트가 발생할 때 호출된다.이 메소드는 직접 호출하면 절대 안된다. 뷰를 무효화하여 해당 부분을 다시 그리려면, setNeedsDisplay() 또는 setNeedsDisplay(_:) 메소드를 대신 호출 할 수 있다.

태그: ,

카테고리:

업데이트:

댓글남기기