将屏幕坐标中的 NSPoint 转换为窗口坐标

Posted

技术标签:

【中文标题】将屏幕坐标中的 NSPoint 转换为窗口坐标【英文标题】:Convert NSPoint in screen coordinates to window coordinates 【发布时间】:2011-04-30 02:49:54 【问题描述】:

我正在一个可可应用程序中实现拖放,我正在使用 NSDraggingSource 协议中的以下方法:

- (void)draggedImage:(NSImage *)draggedImage movedTo:(NSPoint)screenPoint

NSPoint 在屏幕坐标中给出,我需要它在窗口或视图坐标中。如果使用 NSEvent 调用该方法,我可以执行以下操作:

    -(void)mouseDown:(NSEvent *)pTheEvent 

 NSPoint tvarMouseInWindow = [pTheEvent locationInWindow];
 NSPoint tvarMouseInView   = [self convertPoint:tvarMouseInWindow fromView:nil]; 

但我无法弄清楚如何仅使用 NSPoint 来完成。提前致谢!

【问题讨论】:

【参考方案1】:

看看 NSWindow 文档,有一个

- (NSPoint)convertScreenToBase:(NSPoint)aPoint

这将使您可以将点转换为窗口坐标。

【讨论】:

(NSPoint)convertScreenToBase:(NSPoint)aPoint 现在已弃用,取而代之的是 (NSRect)convertRectFromScreen:(NSRect)aRect。显然可以将点转换为矩形,使用这种方法,然后再转换回来,但这真的是现在首选的成语吗?一定有更好的方法。 @Omphalos:似乎没有更好的方法(或者我完全错过了它),所以我最终在 NSWindow 的类别上编写了一个新方法,它构建了一个 NSRect,转换它,并返回转换后的矩形的原点。它有点恢复-convertScreenToBase: 的行为,并让您有机会将其命名为更符合其他类似方法;我打电话给我的-convertPointFromScreen:

以上是关于将屏幕坐标中的 NSPoint 转换为窗口坐标的主要内容,如果未能解决你的问题,请参考以下文章

屏幕坐标和当前窗口坐标如何转换???

VC++6.0 如何获取窗口客户区域在屏幕中的位置

Unity中的坐标系--屏幕转世界坐标

将图像从屏幕坐标转换为世界坐标

窗口调整大小后将鼠标位置转换为 2D openGL 中的世界坐标

iOS:将屏幕坐标中的 CGPoint 转换为 iCarousel 中的 CATransform3D?