iOS/Developer Documentation

[UIKit] draw(_:) 개발문서 번역

Joo-Topia 2021. 2. 2. 03:17

Instance Method - draw(_:)

전달된 직사각형(rect) 내에 리시버들의 이미지를 그린다.


Declaration

func draw(_ rect: CGRect)

Parameters

  • rect
    뷰들 bounds 중 업데이트가 필요한 부분 이다. 처음 뷰를 그릴 때 이 rect는 일반적으로 뷰의 전체 visible bounds 이다. 하지만, 이후 그리기 작업 중에는 , rect가 뷰의 일부만 지정될 수 있다.

Discusstion

이 메서드의 기본 구현은 아무 동작도 없다. Core Graphics와 UIKit과 같은 기술을 사용하여 자신의 콘텐츠를 그리는 서브클래스는 이 메서드를 오버라이드 하고 해당 서브뷰의 draw 코드를 구현해야 한다. 너의 뷰(UIVIew의 서브클래스)가 다른 방법으로 내용을 설정하는 경우 이 메서드를 오버라이드 할 필요가 없다. 예를 들어, 뷰의 배경 색상만 노출하거나 기본 레이어 객체를 사용하여 컨텐츠를 직접 설정하는 경우 이 메서드를 오버라이드 할 필요가 없다.

이 메서드를 호출할 때 까지, UIKit은 뷰를 그리기에 적합한 환경을 구성했으며, 콘텐츠를 렌더링하는데 필요한 그리기 메서드드와 함수를 호출하기만 하면 된다. 특히, UIKit은 그리기를 위한 그래픽 컨텍스트를 생성한 뒤 구성하고나서 해당 컨텍스트의 원점이 뷰의 바운드 사각형의 원점과 일치하도록 해당 컨텍스트의 transform을 조정한다. UIGraphicsGetCurrentContext() 함수를 사용하여 그래픽 컨텍스트에 대한 참조를 얻을 수 있지만, draw(_:) 메서드에 대한 호출 간에 변경할 수 있으므로, 그래픽 컨텍스트에 대한 강력한 참조를 설정하지 않도록 한다.

*"함수"는 func키워드로 정의되는 모든 코드 뭉치(?), 메서드는 클래스 종속되어있는 함수로 이해하면 될 것 같다.
*위 문단을 쉽게 풀어쓰면.. draw함수에서 그래픽 컨텍스트가 호출되는데, 추가적으로 내 커스텀 뷰에서 컨텍스트에 접근할 일이 있으면 draw(_:) 메서드를 오버라이드 한 뒤 UIGraphicsGetCurrentContext() 함수를 호출해서 사용하라는 뜻이다. 추가로 UIGraphicsGetCurrentContext에 대한 강한 참조를 절대로 하지 말라고 한다.

파라미터로 지정된 직사각형(sepcified rect)으로 그리기(drawing)를 제한하여야한다. 또한 뷰의 isOpaque속성이 true인 경우 draw(_:) 지정된 직사각형(sepcified rect)을 완전히 불투명 컨텐츠로 채워야 한다.

UIView를 직접 서브 클래싱하는 경우, 이 메서드의 구현부에서 super의 메서드를 호출할 필요가 없다. 하지만 다른 뷰 클래스를 서브 클래싱 하는 경우, 구현부의 어느 시점(some point) super를 호출해한다.

이 메서드는 뷰가 처음 displayehlf 때 호출되거나, 뷰의 visible 영역을 무효화하는 이벤트가 발생하면 호출된다. 이 메서드를 직접 호출해서는 안된다. 대신에 뷰의 일부를 무효화하여 해당 부분을 다시 그리게 하려면, setNeedsDisplay() 또는 setNeedsDisplay(_:) 메서드를 호출해야한다.