2012-06-19 4 views
4

내 응용 프로그램에서는 NSTextView에 popover를 표시하고 NSTextView에서 선택한 rect의 좌표를 화면 좌표로 변환해야합니다. 이 코드를 사용해 보았습니다 :NSTextView 좌표를 화면 좌표로 변환

NSWindow* viewWindow = [self window]; 
NSRect rect = [self firstRectForCharacterRange:[self selectedRange]]; 
rect = [[self superview] convertRect:rect toView:nil]; //converting to NSClipView coordinate system 
rect = [viewWindow convertRectToScreen:rect]; 
return rect; 

거의 작동하지만 반환 된 rect는 "x"로 인해 "broken"이 발생했습니다. 예를 들어 rect.origin.x이 처음에 670 일 경우 결국 1022와 같습니다.

아이디어가 있으십니까?

감사합니다.

답변

4

알겠습니다.

- (NSRect)rectForPopover 
{  
    NSRect rect = [self firstRectForCharacterRange:[self selectedRange]]; 
    NSRect txtViewBounds = [self convertRectToBacking:[self bounds]]; 
    txtViewBounds = [self.window convertRectToScreen:txtViewBounds]; 

    rect = [[self superview] convertRect:rect toView:nil]; 
    rect = [self.window convertRectToScreen:rect]; 

    rect.origin = NSMakePoint(rect.origin.x - txtViewBounds.origin.x - self.window.frame.origin.x, rect.origin.y); 

    return rect; 
} 
관련 문제