drawRect:

전달 된 사각형 내에서 수신자의 이미지를 그린다.


파라미터

  • rect: 업데이트 되야하는 뷰의 bounds 부분. 처음으로 뷰가 그려질 때 일반적으로 rect는 뷰의 전체 범위이다. 그러나 그 이후의 그리기 작업 중에 rect는 뷰의 일부만 지정할 수 있다.

개요

이 메서드의 기본 구현에서는 아무것도 실행하지 않는다. Core Graphics 및 UIKit과 같은 기술을 사용하여 뷰의 내용을 그리는 하위 클래스는 이 메서드를 재정의하고 해당 드로잉 코드를 구현해야 한다. 뷰의 내용을 앞에서 설명한 기술이 아닌 다른 방법으로 설정하면 이 메서드를 재정의 할 필요가 없다. 예를 들어, 뷰가 배경색 만 표시하거나 뷰가 기본 레이어 객체를 사용하여 직접 내용을 설정하는 경우 이 메서드를 재정의 할 필요가 없다.

이 메서드가 호출될 때까지 UIKit은 뷰에 맞게 드로잉 환경을 설정하고 뷰의 내용을 렌더링 하는데 필요한 드로잉 메서드와 함수를 간단하게 호출할 수 있다. 특히 UIKit은 드로잉을 위한 그래픽 컨텍스트를 만들고 구성하며 뷰의 좌표와 해당 컨텍스트의 좌표(파라미터로 받은 rect 구조체)와 일치하도록 컨텍스트의 변환을 조정한다. UIGraphicsGetCurrentContext 함수를 사용하여 그래픽 컨텍스트에 대한 참조를 얻을 수 있지만 drawRect: 메서드 호출간에 그래픽 컨텍스트가 변경 될 수 있으므로 그래픽 컨텍스트에 대한 강한 참조를 설정하지 마라.

마찬가지로 OpenGL ES와 GLKView 클래스를 사용하여 그리는 경우 GLKit은 이 메서드 (또는 GLKView 델리게이트의 glkView:drawInRect: 메서드)를 호출하기 전에 기본 OpenGL ES 컨텍스트를 뷰에 맞게 적절히 설정하므로 모든 OpenGL ES 콘텐츠를 렌더링 하는데 필요한 명령을 간단하게 구현할 수 있다. OpenGL ES를 사용하여 그리는 방법에 대한 자세한 내용은 OpenGL ES Programming Guide를 봐라.

그리는 것을 파라미터로 받은 rect 부분으로 제한해야 한다. 또한 뷰의 opaque property를 YES로 설정된 경우 drawRect: 메서드는 지정된 rect 영역을 불투명하게 채워야 한다.

UIView를 직접 하위 클래스로 만들면 이 메서드를 구현할 때 super를 호출할 필요가 없다. 그러나 다른 뷰 클래스를 상속받았다면 구현의 어느 시점에서 super를 호출해야 한다.

이 메서드는 뷰가 최초로 표시되었을 때, 또는 뷰가 사라지는 이벤트가 발생했을 때에 불린다. 메서드를 직접 호출하면 안 되다. 대신 뷰의 일부분을 무효화하고 해당 부분을 다시 그리려면 setNeedsDisplay 또는 setNeedsDisplayInRect: 메서드를 호출해라.

참고: https://developer.apple.com/documentation/uikit/uiview/1622529-drawrect

잘못된 부분이 있다면 알려주시면 바로 수정하겠습니다.