objective-c - 自定义 View 中的 mouseDown 事件不显示正确的单击坐标

标签 objective-c cocoa nsview

我有一个自定义 View 类,它接收鼠标事件。我没有获得 mouseDown 或 mouseUp 事件的正确坐标。无论我在 View 内单击什么位置,我都会得到相同的错误坐标。

这是我的自定义 NSView 类中的函数

- (void)mouseDown:(NSEvent *)theEvent
{
    NSPoint coordinateInBaseWindow = theEvent.locationInWindow;
    
    NSPoint coordinateInView = [self convertPoint:coordinateInBaseWindow fromView:nil];
    NSLog(@"left mouse down (x,y) =(%f,%f)", coordinateInView.x, coordinateInView.y);
}

我有一个类似的 mouseUp 事件处理程序。

现在输出始终

left mouse down (x,y) =(0.000000,-1.996910)

left mouse up (x,y) =(0.000000,0.000000)

无论我在 View 内单击什么位置,鼠标左键向下的坐标始终为(0.000000,-1.996910),鼠标左键向上的坐标始终为(0.000000,0.000000)。

  1. 我做错了什么?为什么我无法获取正确的鼠标点击事件坐标?
  2. mouseDown 和 mouseUp 一起单击一次。 mouseDown 和 mouseUp 的坐标不应该相等吗?为什么在这种情况下它们会有所不同?

编辑 1:

omz指出,我应该使用 convertPoint:fromView: 但这也没有解决问题。我仍然得到相同的坐标。

编辑 2: 我在 NSLog 中的格式说明符不正确,这给了我完全错误的结果。

最佳答案

要从窗口坐标转换,您必须使用 convertPoint:fromView: 并以 nil 作为 View 参数。您的转换会起到相反的作用。

关于objective-c - 自定义 View 中的 mouseDown 事件不显示正确的单击坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8488594/

相关文章:

objective-c - NSPanel 设置在 Desktopwindowlevel +1 时出现登录时可见的问题

objective-c - 当应用程序移至垃圾箱或应用程序在 Mac 中被删除时如何收到通知?

objective-c - mouseDragged 未在 NSView 的框架外调用

objective-c - NSSplitView 的不一致状态

iphone - 在 iBooks 中打开 PDF

ios - 强制 WKWebView 显示桌面版本

cocoa - 无法按住 CTRL+拖动 NSButton 到自定义 NSView 标题

cocoa - 将 NSWindow 显示为 NSView 的 subview

ios - Change NSData Size of a UIImage - Compress And Resize UIImage With a Maximum Megabyte Mb 限制

objective-c - Swift 编译器与 Objective-C 编译器