2011-03-31 3 views
2

일부 서브 뷰가있는 내 NSView의 맨 위에 그리려하고 있습니다. 사실 Interface Builder의 연결선 스타일을 재현하려고합니다. 여기이 순간을 위해 사용하고 코드입니다 :NSView의 서브 뷰를 그리는 방법

- (void)drawRect:(CGRect)dirtyRect 
{ 
    // Background color 
    [[NSColor whiteColor] setFill]; 
    NSRectFill(dirtyRect); 

    // Draw line 
    if(_connecting) 
    { 
     CGContextRef c = [[NSGraphicsContext currentContext] graphicsPort]; 
     [[NSColor redColor] setStroke]; 

     CGContextMoveToPoint(c, _start.x, _start.y); 
     CGContextAddLineToPoint(c, _end.x, _end.y);   
     CGContextSetLineWidth(c, LINE_WIDTH); 
     CGContextClosePath(c); 
     CGContextStrokePath(c); 
    } 
} 

첫 번째 부분은 색상입니다 내 NSView (당신이 다른 방법을 알고 있다면, 내가 아이폰 개발에서 오는 원인 '제발 말해 나는 backgroundColor를 그리워 UIView의 속성)

그런 다음 연결이 감지되면 2 NSPoint으로 그립니다. 이 코드는 작동하지만 첫 번째 NSView에만 서브 뷰를 그릴 수는 없습니다.

답변

9

상위 뷰는 하위 뷰를 그릴 수 없습니다. 하위 뷰 위에 다른 뷰를 배치하고 선을 그려야합니다.

+0

나는이 솔루션을 생각해 보았지만 이것이 추한 방법이라고 생각했습니다. 글쎄, 내가 할거야. – klefevre

+1

마우스 이벤트를 수신하기 위해 원래의 하위 뷰를 필요로한다면, 하위 뷰를 그리면서 맨 위에 표시되지 않습니까? –

+1

superview에서 hitTest를 오버라이드하여 오버레이보기에 결코 도달 할 수 없습니다. –

관련 문제