Cocoa 将NSTextView坐标转换为屏幕坐标
在我的应用程序中,我想在NSTextView中显示popover,并需要将NSTextView中所选矩形的坐标转换为屏幕坐标。我尝试过以下代码:Cocoa 将NSTextView坐标转换为屏幕坐标,cocoa,nstextview,nspopover,Cocoa,Nstextview,Nspopover,在我的应用程序中,我想在NSTextView中显示popover,并需要将NSTextView中所选矩形的坐标转换为屏幕坐标。我尝试过以下代码: NSWindow* viewWindow = [self window]; NSRect rect = [self firstRectForCharacterRange:[self selectedRange]]; rect = [[self superview] convertRect:rect toView:nil]; //converting t
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”极大地“破坏”了原点。例如,如果开始时rect.origin.x
为670,则最后等于1022
有什么想法吗
谢谢。我知道了
- (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;
}