2010-07-23 9 views
4

drawRect가 두 번 이상 호출되는 것을 발견했습니다. 불행히도 내 모든 하위 뷰 drawRect (나는 엄격한 무신론자 w.r.t 인터페이스 작성기)에서 그려져 있기 때문에 이것은 이중 드로잉의 불행한 부작용이있었습니다.drawRect 여러 호출 다루기

여러 번 전화 걸기를 처리하는 가장 좋은 방법은 무엇입니까? 다시 호출되는지 확인하는 플래그? 또는 전체보기를 지우고 처음부터 다시 그리기 (내가했던 것처럼?)

답변

2

"귀하의 하위보기가 drawRect에 그려져 있음"이란 무엇을 의미합니까? -addSubview에 전화를 걸었다는 뜻이라면 drawRect에 넣지 마십시오. 필요할 때만 호출되는 더 적절한 장소로 이동하십시오. (아마도 하위 뷰가 인 경우보기에 대해 -initWithFrame : 메소드가 항상 인 경우) drawRect를 사용하여 사용자 정의 그리기를 수행하십시오.

엄밀히 말하면, 여러 번 호출되는 것이 -drawRect의 전체 지점입니다. 필요한 경우보기의 작은 부분을 업데이트하도록 호출되었습니다. 보기를 업데이트하는 경우 (실제로 이동하거나 수퍼 뷰를 업데이트하는 등) 실제로 성능 문제를 피하려면 가능한 한 간단하고 빠르게해야합니다.

0

을 UIKit은 drawRect:를 호출 할 때, 이미 당신을 위해 취소해야으로 그릴 설정 그래픽 컨텍스트를 (당신이 NOclearsContextBeforeDrawing 속성을 설정하지 않은 경우) . setNeedsDisplay/setNeedsDisplayInRect: 대신 drawRect:을 수동으로 호출 하시겠습니까?

또한, 각 뷰는 자체의 내용과 하지의 파단의 내용을 그리기위한 책임이 있습니다.

+0

예를 들어보기에 UIButton이 있으면 어떻게됩니까? 보기 UIButton을 다시 그려야합니까? IS UIButton UIView의 내용 중 일부 –

+0

보기에 "UIButton이있을 수 없습니다"라는 단추가 하위보기가 될 UIButton을 포함 할 수 있습니다. 하위보기는보기의 콘텐츠의 일부로 간주되지 않습니다. – rpetrich