2012-09-25 2 views
5

코코아에서는 뷰를 다시 그리기 위해 setNeedsDisplay: 뷰에 매개 변수 YES를 사용하여 뷰를 다시 그려주는 메시지를 보냅니다. 멀티플렉싱 환경과 같은보기 setNeedsDisplay:NO을 보내려는 상황이 있는지 궁금 해서요. setNeedsDisplay:YES보기를 보내는 경우 setNeedsDisplay:NO으로 즉시 다시 설정하면보기 자체가 다시 그려집니다. setNeedsDisplay:NO를 호출 할 이유가 없다면, 왜 대신에 당신은 아마 알다시피 [view redrawView]setNeedsDisplay : NO는 전혀 사용하지 않습니까?

답변

1

setNeedsDisplay:NO은 이전에 setNeedsDisplay:YES이라고 지칭하는 경우 사용할 수 있습니다. 예 : 때로는 모든 하위 뷰를 표시가 필요한 것으로 표시 한 다음 일부를 표시 해제하는 알고리즘을 실행하는 것이 더 쉽습니다.

-2

같은 것을 구현할 수 같은 지루한 방법을 만들고, 디스플레이 업데이트는 각에서 (필요한 경우) 자동 정상적인 이벤트를 통과하다 고리. 필요한 경우 디스플레이 업데이트를 강제로 수행하려면 setNeedsDisplay:으로 전화하십시오. NSView의 문서에서

:

토론 뷰 객체 변화를 그리기 위해 사용되는 데이터 또는 상태를보기가 setNeedsDisplay를 보내야 할 때마다
: 메시지. 표시가 필요한 것으로 표시된 NSView 객체는 응용 프로그램의 이벤트 루프를 통과 할 때마다 자동으로 다시 표시됩니다. (이벤트 루프 주위에 오기 전에 다시 표시 할 뷰 객체는 물론 즉시 ... 방법을 적절한 표시를 보낼 수 있습니다.)

이 함수의 부울 매개 변수는 단순히 지정 전체 범위의 경우 해당 속성보기가 true 또는 false로 설정된 경우가 아니라 문제의보기에 영향을 주거나 그렇지 않습니다. 따라서 setNeedsDisplay:은 실제로 "redrawView"와 거의 비슷하게 작동하며 추가 매개 변수와 만 작동합니다.

는 위의이 같은 문서에서 영감을했다

편집 :

플래그
YES 경우, 디스플레이를 필요로 수신기의 전체 범위을 표시; 아니오이면 필요하지 않은 표시로 표시합니다.

+3

이것은 대부분 잘못되었습니다. 이벤트 루프는'setNeedsDisplay :'에 의해 결정된 바와 같이 뷰를 다시 그려야하는지 여부를 검사합니다 (실제로 플래그를 설정합니다 :'- [NSView needsDisplay]'). 이 메서드는 절대적으로 즉각적인 다시 그리기를 발생시키지 않으며 모든 패스마다 모든 뷰를 다시 그려야합니다. 언급 된 강제 드로잉 동작은'- [NSView display]'와'- [NSView displayRect :]'에 의해 제공됩니다. http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaViewsGuide/Optimizing/Optimizing.html#//apple_ref/doc/uid/TP40002978-CH11-112409 –

+0

을 참조하십시오. 나는 내 대답을 편집하고 정보가 어디서 왔는지 설명했다. – Mundi

+1

@Mundi 불행히도 이것은 정확하게 내 질문에 대답하지 않습니다. 'setNeedsDisplay : NO'에 대한 사용법이 있는지 묻습니다. – TheAmateurProgrammer