将屏幕坐标中的 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 转换为窗口坐标的主要内容,如果未能解决你的问题,请参考以下文章