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

Dil*_*lon 9 cocoa drag-and-drop

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

- (void)draggedImage:(NSImage *)draggedImage movedTo:(NSPoint)screenPoint{
Run Code Online (Sandbox Code Playgroud)

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

    -(void)mouseDown:(NSEvent *)pTheEvent {

 NSPoint tvarMouseInWindow = [pTheEvent locationInWindow];
 NSPoint tvarMouseInView   = [self convertPoint:tvarMouseInWindow fromView:nil]; }
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何只使用NSPoint来做到这一点.提前致谢!

w-m*_*w-m 13

看看NSWindow的文档,有一个

- (NSPoint)convertScreenToBase:(NSPoint)aPoint
Run Code Online (Sandbox Code Playgroud)

这将允许您将点转换为窗口坐标.

  • `(NSPoint)convertScreenToBase:(NSPoint)aPoint`现在已被弃用,转而使用`(NSRect)convertRectFromScreen:(NSRect)aRect`.显然,可以将一个点转换为一个矩形,使用这个方法,然后转换回来,但这真的是现在首选的成语吗?必须有一个更好的方法. (6认同)
  • @Omphalos:似乎没有更好的方式(或者我完全错过了它),所以我结束了在NSWindow类别上编写一个新方法,它构建了一个NSRect,转换它,并返回原点转换为rect.它可以恢复`-convertScreenToBase:`的行为,并让你有机会根据其他类似的方法更多地命名它.我打电话给我的`-convertPointFromScreen:`. (3认同)