2010-03-05 2 views
1

나는 사용자 정의 NSView이 있고 그 위에 컨트롤이있는 하단 막대가 있으며 그 중 하나는 NSColorWheel입니다.아래쪽 막대 위에 사용자 정의 NSView 채우기 페인트

사용자의 NSView가 300px로 높고 하단 바가 32px 높다는 이유로 간단하게 Window의 높이는 332px입니다.

하단 막대의 한 부분으로 만들어 내 awakeFromNib 앱이 다음 코드를 사용하여 창을로드 : 나는 색으로 사각형을 채울 내 사용자 지정 NSView 클래스에서

[[self window] setAutorecalculatesContentBorderThickness:YES forEdge:NSMinYEdge]; 
[[self window] setContentBorderThickness: 32.0 forEdge: NSMinYEdge]; 

합니다. 사용하여 응용 프로그램로드가 내 NSView 클래스에서 다음과 같은 경우에 모든 것이 잘 작동 : I 이후 하단 바의 컬러 휠이 변경 될 때 사용자 지정 NSView의 색상을 변경하는 방법을 호출하는 경우,

- (void)drawRect:(NSRect)dirtyRect 
{ 
    dirtyRect = [self bounds]; 

    NSColor * mNewColor = [NSColor blackColor]; 
    [mNewColor set]; 
    [NSBezierPath fillRect:dirtyRect]; 
} 

그러나, 아래쪽 막대가 색상으로 덮어 쓰게됩니다. 다음 코드는이 방법을 보여줍니다 (이 코드는 사용자 정의 NSView 클래스에 있습니다

- (void)changeBackgroundColor:(NSNotification *)notification 
{ 
    NSLog(@"Changed background color"); 

    NSRect mRect = [self bounds]; 
    NSColor * mNewColor = [theColorWell color]; 
    [mNewColor set]; 
    [NSBezierPath fillRect:mRect]; 
    [self setNeedsDisplay:YES]; 
} 

창이 즉시 문제를 해결 크기 조정,하지만 분명히 나는 ​​명백한 버그 창 크기를 조정해야 할 사용자를 원하지 않는다 내 bounds 부모 창으로 매핑이 아닌 사용자 정의 NSView 내가 setNeedsDisplay 및 전화로 아직 내가 마우스를 (심지어 단지의 경우 사용하여 창 크기를 조정할 때 조정이 제대로 바인딩 표시하는 이유!

는 내가 이해하지 못하는 것은 1 픽셀 씩).

D o 어떻게 든 다시 그리기의 하단 막대를 설명해야합니까?

모든 도움을 주셨습니다.

답변

2

NSViewdrawRect: 방법으로 도면을 모두 작성해야합니다. 코코아는이 메소드를 호출 할 때 그래픽 컨텍스트를 자동으로 설정합니다. 다른 메소드에서 그리기 작업을 수행하면 사물이 올바르게 그려지지 않을 수 있습니다.

drawRect:의 코드는 NSColorWell에 지정된대로 현재 배경색으로 색상을 설정하고이를 dirtyRect으로 채울 수 있습니다.

그런 다음 다른 방법으로 [self setNeedsDisplay:YES];을 호출하면 drawRect:이 자동으로 호출되어보기를 다시 그립니다. - 매력을 일 http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CocoaViewsGuide/SubclassingNSView/SubclassingNSView.html#//apple_ref/doc/uid/TP40002978-CH7-SW4 (특히 도면 뷰 콘텐츠 섹션)

+0

완벽한가 :

자세한 내용은 여기를 참조하십시오. 나는'drawRect'가 문서에서 지정된대로'setNeedsDisplay'에 의해 호출되고 있다는 것을 깨닫지 못했습니다 ;-) 어쨌든'drawRect'는 초기화 메소드 였을뿐입니다. – Hooligancat

관련 문제